hdu 3172 virtual friends 并查集
2013-05-08 23:31
483 查看
题意很简单就是告诉你一些话,然后就是说这两个人刚成为好朋友,然后问你就是到每句话的这两个人的朋友网里面有多少人。这个题目的输入比较麻烦啊,tle好几次。解法就是每读入一条边就用并查集的思想,修改祖先节点,然后修改包括祖先的朋友网的大小,然后输出祖先节点的朋友网的规模就可以了。
#include<iostream> #include<stdio.h> #include<string> #include<map> using namespace std; map<string,int> A; int father[100005],sum[100005]; int find_ant(int n) { if(n!=father ) father =find_ant(father ); return father ; } void unin(int x,int y) { x=find_ant(x); y=find_ant(y); if(x!=y) { father[x]=y; sum[y]=sum[y]+sum[x]; } } int main() { int t,n,total; string a,b; while(scanf("%d",&t)!=EOF) { while(t--) { cin>>n; total=0; A.clear(); while(n--) { cin>>a>>b; if(A.find(a)==A.end()) { total=total+1; A[a]=total; father[total]=total; sum[total]=1; } if(A.find(b)==A.end()) { total=total+1; A[b]=total; father[total]=total; sum[total]=1; } unin(A[a],A[b]); int ans=find_ant(A[b]); printf("%d\n",sum[ans]); } } } 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(并查集)
- hdu 3172 Virtual Friends(并查集)University of Waterloo Local Contest 2008.09
- 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 (并查集节点统计)
- hdu 3172 Virtual Friends(并查集)
- HDU 3172 Virtual Friends (并查集与map的运用,同HDU1829)
- HDU 3172 Virtual Friends(并查集)
- hdu 3172 Virtual Friends(简单并查集)
- HDU 并查集 - 3172 Virtual Friends
- HDU 3172 Virtual Friends (并查集)
- (hdu step 5.1.6)Virtual Friends(在结点为名字结点的条件下,求并查集的节点数)