hdu 3172(并查集+hash)
来源:互联网 发布:傲剑境界升级数据 编辑:程序博客网 时间:2024/06/08 14:01
解题思路:典型的并查集,只是每个人的名字要转换成数字,可以用map,也可以用字典树,我最开始用的字典树结果爆内存了。。
爆内存:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 200000;int n,fa[maxn],trie[maxn][52],cnt,id[2000000],num;int tot[maxn];char str[2][20];void init(){for(int i = 0; i <= 2*n; i++){fa[i] = i;tot[i] = 1;}memset(id,-1,sizeof(id));memset(trie,-1,sizeof(trie));cnt = num = 0;}int insert(char *s){int p = 0,idx;while(*s != 0){if(*s >= 'A' && *s <= 'Z') idx = *s - 'A' + 26;else idx = *s - 'a';if(trie[p][idx] == -1)trie[p][idx] = ++cnt;p = trie[p][idx];s++;}if(id[p] == -1)id[p] = ++num;return id[p];}int find(int x){if(fa[x] == x) return x;return fa[x] = find(fa[x]);}int main(){int t,x,y,fx,fy;scanf("%d",&t);while(t--){scanf("%d",&n);init();for(int i = 1; i <= n; i++){scanf("%s %s",str[0],str[1]);x = insert(str[0]);y = insert(str[1]);fx = find(x); fy = find(y);if(fx != fy){fa[fy] = fx;tot[fx] += tot[fy];}printf("%d\n",tot[fx]);}}return 0;}
别人的:
#include<stdio.h>#include<map>#include<iostream>using namespace std;map<string,int> m;int set[100005];int num[100005];int find(int x){ int r=x; while(r!=set[r]) r=set[r]; int i=x; while(i!=r) { int j=set[i]; set[i]=r; i=j; } return r;}void merge(int x,int y){ int fx=find(x); int fy=find(y); if(fx!=fy) { set[fx]=fy; num[fy]+=num[fx]; printf("%d\n",num[fy]); } else { printf("%d\n",num[fy]); }}int main(){ int t; char a[25]; char b[25]; while(scanf("%d",&t)!=EOF) { while(t--) { int n; scanf("%d",&n); for(int i=1;i<100005;i++) { set[i]=i; num[i]=1; } m.clear(); int ans=1; for(int i=1;i<=n;i++) { scanf("%s%s",a,b); if(!m[a]) { m[a]=ans++; } if(!m[b]) { m[b]=ans++; } merge(m[a],m[b]); } } } return 0;}
0 0
- hdu 3172(并查集+hash)
- HDU 3172 并查集
- 【并查集+hash】Parity game
- woj 1078 并查集 hash
- sgu 174 Walls hash+并查集
- sgu 174 Walls 并查集+hash
- hdu 2874 Connections between cities (并查集+LCA)hash优化
- CSU-ACM2017暑期训练10-并查集&&HASH A-Virtual Friends HDU
- hdu 3172 字典树+并查集
- hdu 3172 virtual friends 并查集
- HDU 3172 Virtual Friends (并查集)
- 【并查集】-HDU-3172-Virtual Freinds
- 【并查集】 HDU 3172 Virtual Friends
- hdu 3172 Virtual Friends(并查集)
- hdu 3172 Virtual Friends 并查集
- HDU 并查集 - 3172 Virtual Friends
- HDU 3172 Virtual Friends (并查集)
- HDU 3172 并查集+trie树
- Uva 11426 - GCD - Extreme (II) 欧拉函数
- java中的stack
- datagrid页面获取表单一条数据的例子
- Android学习之ItemTouchHelper实现RecylerView的拖拽以及滑动删除功能
- 线程安全问题一定是出现在共享数据上
- hdu 3172(并查集+hash)
- PHP如何判断一个元素是否在已知数组中
- OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)
- 闭包的循环引用问题
- Circumventing Group Policy Settings
- 若无心事挂枝头,便是人间好时节
- go语言学习心得
- test
- 网站分页前后台代码