hdu 3172 Virtual Friends(并查集)University of Waterloo Local Contest 2008.09
题目比较简单,但作为长久不写题之后的热身题还是不错的。
统计每组朋友的朋友圈的大小。
如果a和b是朋友,这个朋友圈的大小为2,如果b和c也是朋友,那么a和c也是朋友,此时这个朋友圈的大小为3。
输入t,表示接下来有t组数据。
每组数据有n组朋友关系。
接下来n行,每行一组朋友关系,然后输出这组朋友的朋友圈大小,即有多少朋友。
然后又是t组数据……(这点好坑)重复上述输入,直到数据结束。
因为最多有10^5个人,那么如果用线性字符串数组保存人名,肯定超时得不要不要的,所以要用map(每次操作时间复杂度为log2(n))。
据说如果并查集不压缩也会爆。我没试,诸位可以试一下。
废话说完,上代码
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <map>
#include <string>
using namespace std; map<string, int> mp; //字符串与数字转换
int val[]; //朋友数
int mg[]; //并查集使用的数组
int n, t; int find(int x)
{
int fx = x;
while(mg[fx] != fx) fx = mg[fx];
while(mg[x] != x)
{
int mid = mg[x];
mg[x] = fx;
x = mid;
}
//printf("%5d\n", fx);
return fx;
} void merge(int x, int y)
{
int mx = find(x);
int my = find(y);
if(mx != my)
{
val[mx] += val[my];
val[my] = val[mx];
mg[mx] = my; }
printf("%d\n", val[mx]);
} int main()
{
// freopen("test.txt", "r", stdin);
while(~scanf("%d", &t))
{
while(t--)
{
scanf("%d", &n);
for(int i = ; i < ; i++)
{
val[i] = ;
mg[i] = i;
}
char a[], b[];
int ans = ; //因为map中int初始值为0,所以赋值时应从1开始
mp.clear(); //每次注意清空mp
for(int i = ; i < n; i++)
{
scanf("%s%s", a, b);
if(!mp[a]) mp[a] = ans++; //加入新节点
if(!mp[b]) mp[b] = ans++;
merge(mp[a], mp[b]);
}
}
}
return ;
}
hdu 3172 Virtual Friends(并查集)University of Waterloo Local Contest 2008.09的更多相关文章
- hdu 3172 Virtual Friends (并查集)
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu 3172 Virtual Friends (映射并查集)
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- HDU 3172 Virtual Friends(map+并查集)
Virtual Friends Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tot ...
- HDU 3172 Virtual Friends(并用正确的设置检查)
职务地址:pid=3172">HDU 3172 带权并查集水题.每次合并的时候维护一下权值.注意坑爹的输入. . 代码例如以下: #include <iostream> # ...
- HDU 1811 拓扑排序 并查集
有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...
- hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)
hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...
- HDU 3172 Virtual Friends (map+并查集)
These days, you can do all sorts of things online. For example, you can use various websites to make ...
- hdu 3172 Virtual Friends(并查集,字典树)
题意:人与人交友构成关系网,两个人交友,相当于两个朋友圈的合并,问每个出两人,他们目前所在的关系网中的人数. 分析:用并查集,其实就是求每个集合当前的人数.对于人名的处理用到了字典树. 注意:1.题目 ...
- hdu 3172 Virtual Friends
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3172 并查集的运用... #include<algorithm> #include< ...
随机推荐
- timeit统计运行时间
import timeitt1 = timeit.timeit('sum(x*x for x in xrange(10000))',number = 10000) print t1
- Chp11: Sorting and Searching
Common Sorting Algo: Bubble Sort: Runime: O(n2) average and worst case. Memory: O(1). void BubbleSor ...
- Thread的第四天学习
线程通信 wait notify synchronized + 同对象 才可 互斥 锁不是放在线程上的,放在共享资源内部的. wait 线程等待 notify 线程唤醒
- 表单插件——form
表单插件——form 通过表单form插件,调用ajaxForm()方法,实现ajax方式向服务器提交表单数据,并通过方法中的options对象获取服务器返回数据,调用格式如下: $(form). a ...
- P1005 采药
P1005 采药 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2005复赛普及组第三题 描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的 ...
- Project Euler 87 :Prime power triples 素数幂三元组
Prime power triples The smallest number expressible as the sum of a prime square, prime cube, and pr ...
- SaaS系列介绍之十二: SaaS产品的研发模式
1 产品研发模式慨述 产品研发模式是企业战略的重点.产品研发路线决定了一系列的管理手段和团队建设问题.也是企业的整理策略和经营思路.产品研发模式贯穿着整个产品的生命周期,从市场调研.立项.需求分析.慨 ...
- XE2编译出来的DLL的DLLMain的退出地方用到了halt0
DelphiXE2内存加模块升级版.支持32位和64位模块. 已转至新的博客 http://www.raysoftware.cn/?p=51 很多年以前写过内存加载DLL的一片技术. http://b ...
- C#实现的ReplaceFirst和ReplaceLast
原文:C#实现的ReplaceFirst和ReplaceLast ReplaceFirst: public static string ReplaceFirst(string input, strin ...
- VLLookUp 不同表单按条件赋值
按条件赋值,如两个表单 假设在Sheet1中存放小麦.水稻.玉米.花生等若干农产品的销售单价: A B 1 农产品名称 单价 2 小麦 0.56 3 水稻 0.48 4 玉米 0.39 5 花生 0. ...