并查集
↑杭电oj ----1213
Accepted | 1213 | 0MS | 1220K | 549 B | G++ |
#include <cstdio> #include <cstring> using namespace std; int arr[10005]; int find(int a){ if(arr[a]==-1) return a; return arr[a]=find(arr[a]);//减脂 } int main() { int t,n,m,a,b,num; scanf("%d",&t); while(t--) { num=0; memset(arr,-1,sizeof(arr)); scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { int fa,fb; scanf("%d%d",&a,&b); fa=find(a); fb=find(b); if(fa!=fb) arr[fa]=fb;//将一个朋友定位另一个的上级 } for(int i=1;i<=n;i++) { if(arr[i]==-1)//-1为最上级,没有任何改动 num++; } printf("%d\n",num); } return 0; }