题意:人与人交友构成关系网,两个人交友,相当于两个朋友圈的合并,问每个出两人,他们目前所在的关系网中的人数。

分析:用并查集,其实就是求每个集合当前的人数。对于人名的处理用到了字典树。

注意:1、题目给出的n是指n对关系,上限有2*n个人。

    2、题目很没有意思的既说了有多组数据,又要求输入组数。实际上还是多组数据。

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int MAXN=; struct Node{
int c;
Node *child[];
Node(){
c=;
for(int i=;i<;i++)
child[i]=NULL;
}
}*root; int cnt;
int p[MAXN],num[MAXN];
char str1[],str2[]; void init(int n)
{
root=new Node();//
cnt=; for(int i=;i<n;i++)
{
p[i]=i;
num[i]=;
}
} int ID(char str[])
{
Node *p=root;
int len=strlen(str);
for(int i=,k;i<len;i++,p=p->child[k])
{
if(str[i]>='a'&&str[i]<='z')
k=str[i]-'a';
else
k=str[i]-'A'+;
if(p->child[k]==NULL)
p->child[k]=new Node();
}
if(p->c)
return p->c;
return p->c=++cnt;//
} int find(int x)
{
return p[x]==x?x:p[x]=find(p[x]);
} int main()
{
int T,n;
while(~scanf("%d",&T))
{
while(T--)
{
scanf("%d",&n); init(n*);//
for(int i=;i<n;i++)
{
scanf("%s%s",str1,str2);
int u=ID(str1);
int v=ID(str2); int fu=find(u);
int fv=find(v); if(fu==fv)
printf("%d\n",num[fu]);
else {
p[fv]=fu;
num[fu]+=num[fv];
printf("%d\n",num[fu]);
} }
}
}
return ;
}

hdu 3172 Virtual Friends(并查集,字典树)的更多相关文章

  1. hdu 3172 Virtual Friends (并查集)

    Virtual Friends Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  2. POJ 2513 Colored Sticks (欧拉回路+并查集+字典树)

    题目链接 Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with ...

  3. POJ - 2513 Colored Sticks(欧拉通路+并查集+字典树)

    https://vjudge.net/problem/POJ-2513 题解转载自:優YoU  http://user.qzone.qq.com/289065406/blog/1304742541 题 ...

  4. POJ-2513 Colored Sticks---欧拉回路+并查集+字典树

    题目链接: https://vjudge.net/problem/POJ-2513 题目大意: 给一些木棍,两端都有颜色,只有两根对应的端点颜色相同才能相接,问能不能把它们接成一根木棍 解题思路: 题 ...

  5. 优先队列 + 并查集 + 字典树 + 欧拉回路 + 树状数组 + 线段树 + 线段树点更新 + KMP +AC自动机 + 扫描线

    这里给出基本思想和实现代码 . 优先队列 : 曾经做过的一道例题       坦克大战 struct node { int x,y,step; friend bool operator <(no ...

  6. nyoj 230/poj 2513 彩色棒 并查集+字典树+欧拉回路

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=230 题意:给你许许多多的木棍,没条木棍两端有两种颜色,问你在将木棍相连时,接触的端点颜色 ...

  7. HDU 3172 Virtual Friends(并用正确的设置检查)

    职务地址:pid=3172">HDU 3172 带权并查集水题.每次合并的时候维护一下权值.注意坑爹的输入. . 代码例如以下: #include <iostream> # ...

  8. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  9. hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点)

    hdu 6200 mustedge mustedge(并查集+树状数组 或者 LCT 缩点) 题意: 给一张无向连通图,有两种操作 1 u v 加一条边(u,v) 2 u v 计算u到v路径上桥的个数 ...

  10. UVA1455 - Kingdom(并查集 + 线段树)

    UVA1455 - Kingdom(并查集 + 线段树) 题目链接 题目大意:一个平面内,给你n个整数点,两种类型的操作:road x y 把city x 和city y连接起来,line fnum ...

随机推荐

  1. Python与数据库[1] -> 数据库接口/DB-API[3] -> ODBC 适配器

    ODBC适配器 / ODBC Adaptor ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Service ...

  2. 每天一个Linux命令(10)cp命令

    cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时,目标文 ...

  3. 分金币 Uva 11300

    题意 给定N个人成环状坐,每个人初始分配Ai的金币,金币总数可以被N整除,每个人可以给左右相邻的人一定数量的金币使得最终每个人的金币数量相同,求转移数量最小的方案所转移的总金币数量. N<=10 ...

  4. (转)Unity3d通过Action注册事件,回调方法

    http://www.cnblogs.com/jisi5789/archive/2013/04/22/3036589.html using UnityEngine; namespace Liulala ...

  5. 写了一个远程桌面管理的Visual Studio扩展程序

    最近看了写Visual Studio扩展相关的一些资料,周末写了一个远程桌面管理器的扩展程序来练练手,由于和VisualStudio集成了,无需切换窗口,用起来还是觉得挺方便的. 关于远程桌面管理器的 ...

  6. 服务器不安装Excel,实现导出Excel功能

    /// <summary> /// 导出为Excel /// </summary> /// <param name="sender"></ ...

  7. Microsoft Office Excel 2007 使用笔记

    1.显示表格边框: 选择要显示边框的单元格,点击“开始”选项卡中的“边框”图标,选中下拉框中的“所有框线” 2.单元格内,文字自动换行: 点击“开始”选项卡中的“自动换行”按钮 3.单元格内,文字手动 ...

  8. linux之openssh协议

    SSH的全称是Secure Shell,简单说来ssh是一种安全的外壳协议,用于两个计算机间安全的远程登陆,说它安全,是因为ssh采用公钥加密的机制.最开始时用作远程管理的工具是telnet,这个协议 ...

  9. Asp.net+EF

    EFRepositoryBase using System; using System.Collections.Generic; using System.Data; using System.Dat ...

  10. Camera setParameters(), getParameters(),unlock()三个方法之间的限制关系

    Camera mCamera = Camera.open(); // 第一次调用getParameters()需要在unlock()方法之前否则出现错误 Camera.Parameters param ...