hdu3172:Virtual Friends
来源:互联网 发布:昆明搜索引擎优化网站 编辑:程序博客网 时间:2024/05/07 20:13
蛮简单的并查集
注意 若map中不存在对应的字符串到整数的映射
则默认映射为0
#include<stdio.h>#include<string.h>#include<algorithm>#include<map>#define maxn 111111using namespace std;int fa[maxn];char a[maxn][30];char b[maxn][30];int big[maxn];void init(){ int i; for(i=0;i<=maxn;i++) fa[i]=i;}int seek(int x){ return fa[x]==x?x:fa[x]=seek(fa[x]);}void Merge(int u ,int v){ int fu = seek(u); int fv = seek(v); if(fu != fv) { fa[fv] = fu ; big[fu] += big[fv]; big[fv] = 0 ; }}int main(){ int t,n,i; map<string,int> cnt; while(scanf("%d",&t)!=EOF) { while(t--) { init(); //memset(big,1,sizeof(big)); scanf("%d",&n); cnt.clear(); for(i=0;i<=maxn;i++) { //fa[i]=i; big[i]=1; } int tot=1;//一开始赋成了0,则第一个数等于没有映射 for(i=0;i<n;i++) { scanf("%s",a[i]); if(!cnt[a[i]]) cnt[a[i]]=tot++; //printf("Jesus1\n"); scanf("%s",b[i]); if(!cnt[b[i]]) cnt[b[i]]=tot++; //printf("Jesus2\n"); int aa=cnt[a[i]]; int bb=cnt[b[i]]; //printf("Jesus3\n"); Merge(aa,bb); // printf("Jesus4\n"); int ans=seek(aa); printf("%d\n",big[ans]); }} } return 0;}
0 0
- HDU3172--Virtual Friends
- hdu3172 Virtual Friends
- hdu3172 Virtual Friends
- HDU3172 Virtual Friends
- hdu3172 Virtual Friends
- HDU3172 Virtual Friends
- hdu3172 Virtual Friends
- HDU3172---Virtual Friends
- hdu3172:Virtual Friends
- HDU3172-Virtual Friends
- HDU3172 UVA11503 Virtual Friends
- HDU3172-Virtual Friends
- HDU3172 Virtual Friends 并查集
- Hdu3172 - Virtual Friends - 并查集
- hdu3172 Virtual Friends--并查集
- hdu3172 Virtual Friends 并查集 map映射
- hdu3172 Virtual Friends 带权并查集
- 带权并查集:HDU3172-Virtual Friends
- The method setProgress(int, int, boolean) is undefined for the type NotificationCompat.Builder
- sudo: no tty present and no askpass program specified 解决方法
- hammer实现拖动旋转和缩放
- 多线程的概念 程序,进程,线程
- 数据结构基础(2) --顺序查找 & 二分查找
- hdu3172:Virtual Friends
- Juicer模板引擎
- 内隐记忆和外显记忆比较
- Android开发中Handler的经典总结
- zoj -- 3885 The Exchange of Items(最小费用最大流)
- 线程安全与并发安全探究(一)
- TextRank
- 安卓静态代码检查工具比较
- java中Collections.sort的用法