HDU 1213 How Many Tables (并查集,常规)
并查集基本知识看:http://blog.csdn.net/dellaserss/article/details/7724401
题意:假设一张桌子可坐无限多人,小明准备邀请一些朋友来,所有有关系的朋友都可以坐同一张桌,没有关系的则要另开一桌,问需要多少张桌子(小明不坐,不考虑小明与其他人的关系)?
思路:常规的并查集。要求出所有人的老大,有几个老大就要几张桌子。那么有关系的都归为同一个老大。用数组实现,再顺便压缩路径。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=;
int pre[N]; //结点i的上级
inline void init(int n){for(int i=; i<=n; i++) pre[i]=i;} //将上级初始化为自己 int find(int x) //找x的上级
{
int k=x;
while(pre[x]!=x) x=pre[x]; //找上级
int tmp;
while(pre[k]!=x) //优化:路径压缩
{
tmp=pre[k];
pre[k]=x;
k=tmp;
}
return x;
} void joint(int a,int b) //将a和b合并为一个集合
{
a=find(a);
b=find(b);
if(a!=b) pre[a]=b;
} int check(int n) //查查到底需要几张桌子
{
set<int> sett;
for(int i=; i<=n; i++) find(i); //防漏网之鱼,将所有人的老大推到最顶。
for(int i=; i<=n; i++) sett.insert(pre[i]);
return sett.size();
}
int main()
{
//freopen("e://input.txt", "r", stdin);
int t, n, m, a, b;
cin>>t;
while(t--)
{
scanf("%d%d", &n, &m);
init(n);
for(int i=; i<m; i++)
{
scanf("%d%d",&a,&b);
joint(a,b);
}
printf("%d\n",check(n));
}
return ;
}
AC代码
HDU 1213 How Many Tables (并查集,常规)的更多相关文章
- HDU 1213 - How Many Tables - [并查集模板题]
		
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 Today is Ignatius' birthday. He invites a lot of ...
 - HDU 1213 How Many Tables 并查集 水~
		
http://acm.hdu.edu.cn/showproblem.php?pid=1213 果然是需要我陪跑T T,禽兽工作人员还不让,哼,但还是陪跑了~ 啊,还有呀,明天校运会终于不用去了~耶耶耶 ...
 - HDU 1213 How Many Tables(并查集,简单)
		
题解:1 2,2 3,4 5,是朋友,所以可以坐一起,求最小的桌子数,那就是2个,因为1 2 3坐一桌,4 5坐一桌.简单的并查集应用,但注意题意是从1到n的,所以要减1. 代码: #include ...
 - HDU 1213  How Many Tables 并查集 寻找不同集合的个数
		
题目大意:有n个人 m行数据,每行数据给出两个数A B,代表A-B认识,如果A-B B-C认识则A-C认识,认识的人可以做一个桌子,问最少需要多少个桌子. 题目思路:利用并查集对相互认识的人进行集合的 ...
 - hdu 1213 求连通分量(并查集模板题)
		
求连通分量 Sample Input2 //T5 3 //n m1 2// u v2 34 5 5 12 5 Sample Output24 # include <iostream> # ...
 - HDU 1213 How Many Tables(模板——并查集)
		
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 Problem Description Today is Ignatius' birthday ...
 - HDU 1213 How Many Tables(并查集模板)
		
http://acm.hdu.edu.cn/showproblem.php?pid=1213 题意: 这个问题的一个重要规则是,如果我告诉你A知道B,B知道C,这意味着A,B,C知道对方,所以他们可以 ...
 - HDU - 1213 How Many Tables  【并查集】
		
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1213 题意 给出N个人 M对关系 找出共有几对连通块 思路 并查集 AC代码 #include < ...
 - HDU 1213  How Many Tables (并查集)
		
How Many Tables 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/C Description Today is Ig ...
 
随机推荐
- EXT心得--并非所有的items配置对象都属于EXT的内置类
			
之前我对EXT的items中未指明xtype的配置对象有一个错误的认识--即虽然某个items未指明它下面的某个组件的xtype,但这个组件肯定属性EXT的某个类.然而今天在查看actioncolum ...
 - JS中关于JS文件的引用以及问题
			
问题描述: 由于JSP中JS函数比较多,因此打算新建一个JS文件在JSP中引用JS文件,现在出现如下问题,JS如何引用时正确的,JS引用之后出现乱码如何解决? 问题解决: (1)JS ...
 - JavaScript高级---组合模式设计
			
一.设计模式 javascript里面给我们提供了很多种设计模式: 工厂.桥.组合.门面.适配器.装饰者.享元.代理.观察者.命令.责任链 在前面我们实现了工厂模式和桥模式 工厂模式 : 核心:为了生 ...
 - [设计模式] 14 命令模式 Command
			
Command 模式通过将请求封装到一个对象(Command)中,并将请求的接受者存放到具体的 ConcreteCommand 类中(Receiver)中,从而实现调用操作的对象和操作的具体实现者之间 ...
 - Rsyslog配置
			
http://blog.itpub.net/30015039/viewspace-1457009/
 - MessageBox.Show()如何换行
			
MessageBox.Show("你好!\n\r可以使用", "换行");
 - JSP include标签和include指令
			
test1.jsp <% int a = 5; out.println(a); %> test2.jsp <jsp:include page="/test1.jsp&quo ...
 - CSS中nth-child和nth-of-type的简单使用
			
ele:nth-child是查找父元素下的子元素,包括子元素类型非ele的,当子元素类型不是ele时,则不会进行任何操作: ele:nth-of-type是查找父元素下的子元素类型为ele的元素,其是 ...
 - Spring与Hibernate整合
			
Spring与Struts2整合的目的: 让Spring管理Action Spring整合Hinernate的目的: --管理SessionFactory(单例的),数据源 --声明式事务管理 1.首 ...
 - WPF中Timer与DispatcherTimer类的区别
			
前几天在WPF中写了一个轨迹回放的功能,我想稍微做过类似项目的,都晓得采用一个时间控件或者时间对象作为调度器,我在这么做的时候,出现了问题,于是将程序中的Timer换成了DispatchTimer,然 ...