//将每个元素看为一个集合,然后通过并查集合并集合,然后再将余下的集合连接起来即可 #include<iostream> #include<vector> using namespace std; int main(){ int n,m; while(cin>>n>>m){ int t=n; vector<int> v(n+1,-1); while(m--){ int x,y; cin>>x>>y; int a=x,b=y; while(v[a]!=-1)a=v[a];//找代表元素 while(v[b]!=-1)b=v[b]; if(a==b)continue; else v[b]=x,t-=1;//合并集合 } v.clear(); cout<<t-1<<endl; } }