《并查集》hdu acm 5.1.7 c++ map的使用

来源:互联网 发布:网络电视机顶盒牌子 编辑:程序博客网 时间:2024/05/30 19:33
#include<iostream>#include<stdio.h>  #include<map>using namespace std;map<string,int> m;const int maxn=200005;int f[maxn],num[maxn],cnt;char name[maxn][15];void init(){int i;for(i=1;i<maxn;i++){f[i]=i;num[i]=1;}}int find(int x){if(f[x]!=x)f[x]=find(f[x]);return f[x];}void merge(int x,int y){int fx,fy;fx=find(x);fy=find(y);if(fx!=fy){f[fx]=fy;num[fy]+=num[fx];printf("%d\n",num[fy]);}else{printf("%d\n",num[fy]);}}int main(){int t,n;char a[25],b[25];while(scanf("%d",&t)!=EOF){while(t--){init();scanf("%d",&n);m.clear();cnt=1;while(n--){scanf("%s%s",a,b);if(!m[a]){m[a]=cnt++;}if(!m[b]){m[b]=cnt++;}              merge(m[a],m[b]);}}}return 0;}
0 0
原创粉丝点击