解题思路:典型的并查集,只是每个人的名字要转换成数字,可以用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;
}

hdu 3172(并查集+hash)相关推荐

  1. hdu 5606(并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5606 解题思路: 这题实际上是要找一些连通的节点,使得边上的权值都为0. 很明显,首先把权值为0的边都 ...

  2. HDU 5441并查集 by cyl

    HDU 5441 题意: ​ 杰克喜欢旅游,从城市a到城市b是他最喜欢的,现在有n个城市m个路. ​ 当杰克在从城市a到城市b 的时候需要坐车,但是需要有等待时间t,他无法忍受超过x 的等待时间. ​ ...

  3. hdu 1232 并查集

    并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了.以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定.不分享出来真是对不起party了.(party:我靠,关我嘛事啊?我跟你很熟么?) ...

  4. hdu 4907(并查集)

    Task schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Pr ...

  5. hdu 2473(并查集+删除操作)

    解题思路:这道题有并查集的删除操作,如果直接对这一棵树进行删除节点操作肯定是很困难的.所以可以建立虚拟节点,只要有一个节点要被删除,就直接把它投影到虚拟节点上,即用这个虚拟节点来代替我们要删除的节点. ...

  6. hdu 3081(并查集+最大流)

    题目大意: n个男孩n个女孩,女孩选男孩,每个女孩都要选到不同的人 k对女孩有相同选择标准, 女孩每轮都选择没选过的男孩, 问总共能选几轮.解题思路:女孩编号1......n,男孩编号n+1,n+2, ...

  7. hdu 5441 (并查集)

    题意:给你n个点,m条边构成无向图.q个询问,每次一个值,求有多少条路,路中的边权都小于这个值 a->b 和 b->a算两种 思路:把权值从小到大排序,询问从小到大排序,如果相连则用并查集 ...

  8. hdu 2545 并查集

    题目描述:给定一个无向图,判断这个图是否满足任意两点之间有且仅有一条通路. 思路:并查集,若a和b之间有一条边且处于不同的集合中,则将a和b所在集合合并:若a和b本就在同一集合中(有一条通路),则加上 ...

  9. hdu 1856 并查集——ac的不一定正确

    这次深深体会到ac的代码不一定正确.呵呵.cry_mas前一段才和我说起.我还半信半疑.话说好久以前他就说过类似的话,当时水平太菜了.现在深深体会到ac的代码不一定正确.这要坑死了啊,正式比赛碰到真是 ...

最新文章

  1. 推荐 查公司信息的一个网站
  2. mysql 织梦 索引_Mysql索引详解 建立索引的优势劣势以及索引规范
  3. Python知识图谱
  4. LeetCode算法题-Valid Palindrome II(Java实现)
  5. docker安装、启动mongo
  6. PADS2007库转换为PADS 9.0以上库文件
  7. 关于微信H5自动播放视频-canvas实现逐帧动画效果加音频
  8. 前端常见的浏览器兼容性问题及解决方案
  9. 人工智能终将自我进化?排除无用功能,让自己更加完美?
  10. 三网快速充值话费通道源码
  11. python任务栏通知区域_PyQT实现通知区域图标和对话气泡
  12. 服务器机柜与网络机柜
  13. Google登录接入
  14. 20155318 《Java程序设计》实验四 (Android程序设计)实验报告
  15. SLAM学习笔记《Past, Present, and Future of Simultaneous Localization and Mapping: Toward the Robust-Per》
  16. 简述需求评审的目的、主要内容、主要参加人员.
  17. PC流氓软件卸载神器Geek Uninstaller
  18. ZK Studio 1.0 发布新功能
  19. day03【List、Set】
  20. 信息系统项目管理师教程读书笔记(八)

热门文章

  1. 「神策智能推荐」如何助力企业?惠头条、纵横文学、东方明珠、妈妈帮等这样说...
  2. 神策数据算法专家:推荐系统的实践与思考(上)
  3. 2、Spring Cloud - 入门概述
  4. JavaWeb Cookie详解
  5. hdu 2433 Travel
  6. 《数据驱动安全:数据安全分析、可视化和仪表盘》一3.3 读入数据
  7. 人生第一次删好友,删的就是你!连路飞都怒了!
  8. logistics and sigmoid
  9. convex function
  10. 其实大学老师在剑桥读博士,好像录取不难