博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Virtual Friends (HDU3172)
阅读量:4616 次
发布时间:2019-06-09

本文共 2305 字,大约阅读时间需要 7 分钟。

题目链接 

Virtual Friends

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 9227    Accepted Submission(s): 2669

Problem Description
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
Input file contains multiple test cases. 
The first line of each case indicates the number of test friendship nest.
each friendship nest begins with a line containing an integer F, the number of friendships formed in this frindship nest, 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

 

Source

 

 

注意此题多组数据,跟正常多的多组数据不同

AC代码:
#include
#include
#include
#include
using namespace std;const int maxn= 110000;int pre[maxn],num[maxn];char name1[30],name2[30];string str1,str2;map
mmap;int find(int x){ int r=x; while(r!=pre[r]) r=pre[r]; int i=x,j; while(pre[i]!=r) { j=pre[i]; pre[i]=r; i=j; } return r;}void join(int x,int y){ int fx=find(x),fy=find(y); if(fx!=fy) { pre[fx]=fy; num[fy]+=num[fx]; num[fx]=0; } printf("%d\n",num[fy]); ///每次都要输出}int main(){ int t,n; while(~scanf("%d",&t)) ///多组数据 { while(t--) { mmap.clear(); scanf("%d",&n); for(int i=1; i

 

转载于:https://www.cnblogs.com/longl/p/7281254.html

你可能感兴趣的文章
多线程2:java.util.concurrent.atomic.*
查看>>
SAP接口编程 之 JCo3.0系列(01):JCoDestination
查看>>
day3-编码、文件、集合、函数、递归
查看>>
使用Windows系统提供的IP控件
查看>>
hibernate与ibatis的区别
查看>>
jsp自定义标签开发
查看>>
Reorder Point Planning Procedure
查看>>
抽象类和接口的区别
查看>>
输出方式
查看>>
Python程序中的协程操作-greenlet模块
查看>>
Hdu 3395 【最大权值匹配】.cpp
查看>>
RPC框架
查看>>
DNS
查看>>
Winform项目部署
查看>>
React入门---开始前的准备(上)-2
查看>>
说说Kindle那些事
查看>>
HDOJ树形DP专题之Tree Cutting
查看>>
钢笔工具路径描边技巧 课时2:9描边路径的应用
查看>>
从0开始学习 GITHUB 系列之「初识 GITHUB」【转】
查看>>
循环控制
查看>>