原题链接:点我转移
这个题,就是一个快乐并查集,看根的个数,减去一就行。
#include<iostream> using namespace std; int bin[1010]; int find(int x) { int px=x; while(px!=bin[px]) px=bin[px]; return px; } void merge(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) bin[fx]=fy; } int main() { int m,n,x,y; while(cin>>n&&n) { for(int i=1;i<=n;i++) bin[i]=i; cin>>m; while(m--) { cin>>x>>y; merge(x,y); } int sum=-1; for(int i=1;i<=n;i++) if(bin[i]==i) sum++; cout<<sum<<endl; } return 0; }