hdu 3172 Virtual Friends
2015-05-08 11:04
393 查看
#include<stdio.h> #include<string.h> #include<string> #include<iostream> #include<algorithm> #include<map> using namespace std; const int N=100000+5; int bin ,ans ; map<string,int>m; int Find(int x) { while(bin[x]!=x) x=bin[x]; return x; } void Merge(int x,int y) { int fx=Find(x),fy=Find(y); if(fx==fy) printf("%d\n",ans[fx]); else if(fx==x&&fy==y) { bin[fx]=fy; ans[fy]+=ans[fx]; printf("%d\n",ans[fy]); } else if(fx!=x&&fy==y) { bin[y]=fx; ans[fx]+=ans[y]; printf("%d\n",ans[fx]); } else if(fx==x&&fy!=y) { bin[x]=fy; ans[fy]+=ans[x]; printf("%d\n",ans[fy]); } else { bin[fx]=fy; ans[fy]+=ans[fx]; printf("%d\n",ans[fy]); } } void init() { for(int i=0; i<N; i++) { bin[i]=i; ans[i]=1; } } int main() { int i,tot,T,n,x,y; string n1,n2; while(~scanf("%d",&T)) { while(T--) { tot=1; scanf("%d",&n); init(); m.clear(); for(i=0; i<n; i++) { cin>>n1>>n2; if(m[n1]==0) { m[n1]=tot; tot++; } if(m[n2]==0) { m[n2]=tot; tot++; } x=m[n1]; y=m[n2]; Merge(x,y); } } } return 0; }
相关文章推荐
- hdu 3172 Virtual Friends(加权并查集)
- HDU 3172 Virtual Friends (并查集)
- HDU 3172 Virtual Friends
- hdu 3172 Virtual Friends
- 并查集 HDU 3172 Virtual Friends
- 文章标题 HDU 3172 : Virtual Friends (并查集+map)
- HDU 3172 Virtual Friends
- hdu 3172 Virtual Friends(并查集+map)
- hdu 3172 Virtual Friends
- hdu 3172 Virtual Friends(简单并查集)
- hdu 3172 Virtual Friends
- hdu 3172 Virtual Friends (并查集 + 字典树)
- HDU 3172 Virtual Friends (并查集与map的运用,同HDU1829)
- hdu 3172 Virtual Friends(并查集)
- hdu 3172 Virtual Friends 【并查集+map】
- HDU 3172 Virtual Friends 带权并查集 -秩
- HDU 3172 Virtual Friends(带权并查集)
- HDU - 3172 Virtual Friends(并查集)
- (HDU - 3172)Virtual Friends
- 【STL+并查集+卡格式卡时间】HDU 3172——Virtual Friends