hdu 3172 Virtual Friends(并查集+map)
2014-06-21 13:39
337 查看
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3172
思路:用map建立字符与编号的对应。
注意:
(1)输入while(scanf("%d",&t)!=EOF)
{
while(t--)
{}
}
(2)每次组数据之前map的清零。
(3)map中是否有对字符串a的编号
if(p.find(a)==p.end()) 没找到
思路:用map建立字符与编号的对应。
注意:
(1)输入while(scanf("%d",&t)!=EOF)
{
while(t--)
{}
}
(2)每次组数据之前map的清零。
(3)map中是否有对字符串a的编号
if(p.find(a)==p.end()) 没找到
#include<cstdio> #include<string> #include<map> using namespace std; const int num=200005; int m,fa[num],r[num]; map<string,int> p; void init() { int i; for(i=0;i<num;i++) { fa[i]=i; r[i]=1; } } int f_fa(int a) { if(fa[a]==a) return a; return f_fa(fa[a]); } void uni(int a,int b) { int ra,rb; ra=f_fa(a); rb=f_fa(b); if(ra!=rb) { if(r[ra]>r[rb]) { fa[rb]=ra; r[ra]+=r[rb]; } else { fa[ra]=rb; r[rb]+=r[ra]; } } } int main() { int t,id; char a[25],b[25]; //freopen("in.txt","r",stdin); while(scanf("%d",&t)!=EOF) { while(t--) { p.clear(); scanf("%d",&m); id=0; init(); while(m--) { scanf("%s%s",a,b); if(p.find(a)==p.end()) p[a]=id++; if(p.find(b)==p.end()) p[b]=id++; uni(p[a],p[b]); printf("%d\n",r[f_fa(p[a])]); } } } return 0; }
相关文章推荐
- 文章标题 HDU 3172 : Virtual Friends (并查集+map)
- HDU-3172 Virtual Friends 并查集+map
- 【 HDU 3172 Virtual Friends】 并查集+map指针优化
- HDU 3172 Virtual Friends 并查集+map
- 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 (并查集 + 字典树)
- 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 (并查集)
- hdu 3172 Virtual Friends
- hdu 3172 Virtual Friends(map)