湖南中医药大学2017年集训队第四场选拔赛-Problem F: Virtual Friends
来源:互联网 发布:淘宝手机版订单回收站 编辑:程序博客网 时间:2024/05/01 15:56
Problem F: Problem C: Virtual Friends
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 106 Solved: 55
[Submit][Status][Web Board]
Description
Problem C: Virtual Friends
These days, you can do all sorts of things online. For example, you can use various websites to make virtual friends. For some people, growing their social network (their friends, their friends’ friends, their friends’ friends’ friends, and so on), has become an addictive hobby. Just as some people collect stamps, other people collect virtual friends.
Your task is to observe the interactions on such a website and keep track of the size of each person’s network.
Assume that every friendship is mutual. If Fred is Barney’s friend, then Barney is also Fred’s friend.
Input
The first line of input contains one integer specifying the number of test cases to follow. Each test case begins with a line containing an integer F, the number of friendships formed, which is no more than 100 000. Each of the following F lines contains the names of two people who have just become friends, separated by a space. A name is a string of 1 to 20 letters (uppercase or lowercase).
Output
Whenever a friendship is formed, print a line containing one integer, the number of people in the social network of the two people who have just become friends.
Sample Input
1
3
Fred Barney
Barney Betty
Betty Wilma
Sample Output
2
3
4
[分析]
就是挺中规中矩的一个并查集。见过这题,请教过张灿大佬,这回做出来了,开心。
[代码]
#include <cstdio> #include <map> #include <string> using namespace std;map<string, int>mp;int n, dad[100006], sum[100006];int getdad(int a){ if (dad[a] == a) return a; else { dad[a] = getdad(dad[a]); return dad[a]; }}int Merge(int a, int b){ a = getdad(a); b = getdad(b); if (a!= b) { dad[a] = b; sum[b] += sum[a]; } return sum[b];}int main(){ int t, n; char a[30], b[30]; while (scanf("%d", &t) != EOF) { while (t--) { mp.clear(); int num = 1; scanf("%d", &n); for (int i = 1; i<100005; i++) { dad[i] = i; sum[i] = 1; } for(int i=0;i<n;i++) { scanf("%s%s", a, b); if (!mp[a])mp[a] = num++; if (!mp[b])mp[b] = num++; printf("%d\n", Merge(mp[a], mp[b])); } } } return 0;}
- 湖南中医药大学2017年集训队第四场选拔赛-Problem F: Virtual Friends
- 湖南中医药大学2017年集训队第四场选拔赛-Problem D: Jug Hard
- 湖南中医药大学2017年集训队第四场选拔赛-Problem B: Power Eggs
- 湖南中医药大学2017年集训队第二场选拔赛
- 湖南中医药大学2017年集训队第五场选拔赛
- 2017年集训队第四场选拔赛Trainsorting
- 2017年集训队第四场选拔赛 -string Game
- 中南大学2016年校队选拔赛第二场Problem F
- 中南大学2016年校队选拔赛第一场Problem E
- 中南大学2016年校队选拔赛第一场Problem A
- 中南大学2016年校队选拔赛第一场Problem D
- 中南大学2016年校队选拔赛第二场Problem A
- 2017南工软件ACM集训队选拔赛第一场
- 第四场选拔赛
- 【2017年浙江中医药大学大学生程序设计竞赛(重现赛)】A B E F G
- 【2017年浙江中医药大学大学生程序设计竞赛】F 开心的cc 【线段树+思维】
- 湖南工业大学个人选拔赛第一场 题解
- 2016年湖南中医药大学考博英语考.试答.案《466068743+考過付》
- 去除<input type='file'>右边路径方法
- Vuex 模块化实现待办事项的状态管理
- Echarts的研究(二)
- 下拉菜单中自动亮度调节
- 文章标题
- 湖南中医药大学2017年集训队第四场选拔赛-Problem F: Virtual Friends
- 关于js打包
- Android Okio
- 音频开发基础知识
- 安卓NDK开发之开发环境搭建以及使用的注意事项
- Java项目在jsp页面中引入jquery框架的步骤
- spring data RedisCacheManager 源码查看与配置解析
- maven 上传解决The current branch is not configured for pull No value for key branch.master.merge found i
- activiti&flowable获取下一个审批节点