并查集 题1
来源:互联网 发布:wiki.apache.org 编辑:程序博客网 时间:2024/05/22 10:59
问题描述
今天是Ignatius的生日。他邀请很多朋友。现在是晚餐时间。Ignatius想知道他至少需要多少张桌子。你必须注意到,并不是所有的朋友都认识对方,所有的朋友都不想留在陌生人身上。
这个问题的一个重要规则是,如果我告诉你A知道B,B知道C,这意味着A,B,C彼此认识,所以他们可以留在一个表中。
例如:如果我告诉你A知道B,B知道C,D知道E,所以A,B,C可以留在一个表中,D,E必须留在另一个表中。所以Ignatius至少需要2张桌子。
输入
输入开始于表示测试用例数的整数T(1 <= T <= 25)。然后T测试用例如下。每个测试用例从两个整数N和M开始(1 <= N,M <= 1000)。N表示朋友的数量,朋友的标记从1到N.然后M行跟随。每行由两个整数A和B(A!= B)组成,这意味着朋友A和朋友B彼此认识。两种情况之间会有一条空白线。
产量
样品输入
2
5 3
1 2
2 3
4 5
5 1
2 5
样品输出
2
4
并查集解析:http://blog.csdn.net/dellaserss/article/details/7724401/
写的非常好!!
转;
代码:
#include<stdio.h>#include<string.h>int pre[1005];int t[1005];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 mix(int x,int y){ pre[x]=y;}int main(){ int n; scanf("%d",&n); while(n--) { int x,y; scanf("%d%d",&x,&y); for(int i=1;i<=x;i++) pre[i]=i; while(y--) { int z,b; scanf("%d%d",&z,&b); int q,p; q=find(z); p=find(b); if(q!=p) mix(q,p); } memset(t,0,sizeof(t)); for(int i=1;i<=x;i++) t[find(i)]=1; int ans=0; for(int i=1;i<=x;i++) if(t[i]==1) ans++; getchar(); printf("%d\n",ans); } return 0; }
阅读全文
0 0
- 并查集 题1
- 并查集-1
- 【并查集小结】今日并查集水题
- 并查集简单题
- 并查集笔试题
- 1poj1611(并查集)
- 并查集----(1)
- MCS 并查集#1
- 并查集示例1
- 并查集(1)
- HDU3938 并查集 并查集
- 并查集(集并查)
- NOIP 2017 Day2 题1:奶酪 并查集
- 【并查集入门专题1】A+B+D 三道模板题 hdu1232 hdu1233 poj2524【并查集模板】
- HDU1232 并查集<并>
- 并查集-百度笔试题
- 并查集简单题-pku1611
- poj 1161 并查集 入门题
- js中获取时间的详细代码
- Ubuntu 14.04.2登陆界面无限循环的解决办法
- 《机器学习实战》之Numpy函数库基础
- 智能照明系统在控制上的多种模式
- CSS的引入方式
- 并查集 题1
- python小游戏----猜大小
- 打擂台算法
- 膜拜 丹尼斯·里奇(纪念 C 语言之父离世 6 周年) 我们欠他的不止是张电影票
- Internet Download Manager(idm下载器)官方中文版V6.29.2下载 | idm破解版
- Hibernate validate 实现简单的表单校验
- Unreal4 后期处理材质
- js实现异步循环实现代码
- Solovary-Strassen 计算幂次模n值 改进 位运算