亲友团问题
2015-07-17 11:30
330 查看
Description
在2014“华为杯”南邮大学生团体歌唱大赛每一个轮比赛现场,众多亲友团是一道亮丽的风景,他(她)们或来助威、或来观摩、或来刺探对手情报,不同亲友团之间偶尔还起冲突。为避免安全问题,主办方在赛场会划分许多独立区域,每一个区域安置一个亲友团,现在请你根据主办方提供的比赛现场信息,预测至多需要划分出多少个独立区域。
我们将主办方提供的比赛现场信息进行简化,从1开始按顺序给进入比赛现场的每位亲友分配一个编号,依次为1、2、…、K,K为亲友总数,为保护隐私,主办方只能告诉你M组两个不同亲友属于同一亲友团信息,这些信息有可能重复。
Input
输入包括多个测试用例,首先给出测试用例数N,接着给出N个测试用例,1≤N≤100。
每一个测试用例包括M+1行,首先给出两个整数K和M;再依次给出M行,每行给出两个不同正整数i和j,表示两个不同亲友i和j属于同一亲友团,i≠j,1≤i≤K,1≤j≤K,,1≤K≤10000,1≤M≤10000。
Output
输出包括多行,对于每个测试用例,输出一行,给出至多需要划分出的独立区域数量。
Sample Input
2
3 1
1 2
3 2
1 2
2 3
Sample Output
2
1
在2014“华为杯”南邮大学生团体歌唱大赛每一个轮比赛现场,众多亲友团是一道亮丽的风景,他(她)们或来助威、或来观摩、或来刺探对手情报,不同亲友团之间偶尔还起冲突。为避免安全问题,主办方在赛场会划分许多独立区域,每一个区域安置一个亲友团,现在请你根据主办方提供的比赛现场信息,预测至多需要划分出多少个独立区域。
我们将主办方提供的比赛现场信息进行简化,从1开始按顺序给进入比赛现场的每位亲友分配一个编号,依次为1、2、…、K,K为亲友总数,为保护隐私,主办方只能告诉你M组两个不同亲友属于同一亲友团信息,这些信息有可能重复。
Input
输入包括多个测试用例,首先给出测试用例数N,接着给出N个测试用例,1≤N≤100。
每一个测试用例包括M+1行,首先给出两个整数K和M;再依次给出M行,每行给出两个不同正整数i和j,表示两个不同亲友i和j属于同一亲友团,i≠j,1≤i≤K,1≤j≤K,,1≤K≤10000,1≤M≤10000。
Output
输出包括多行,对于每个测试用例,输出一行,给出至多需要划分出的独立区域数量。
Sample Input
2
3 1
1 2
3 2
1 2
2 3
Sample Output
2
1
#include <iostream> #include <cstdio> using namespace std; #define min(x,y) ((x)<(y)?(x):(y)) #define MAXN 10010 int father[MAXN]; int Search(int i) { int r, l; for(r = i; r != father[r]; r = father[r]); l = i; if(i != r) { while(father[i] != r) { l = father[i]; father[i] = r; i = l; } } return r; } void link(int a, int b) { int x = Search(a), y = Search(b); int nmin, nmax; nmin = min(x, y); nmax = x + y - nmin; father[nmax] = nmin; } void Init(int n) { for(int i = 0; i < n; i++) { father[i] = i; } } void Solve() { int K, M; scanf("%d %d",&K, &M); int a, b; Init(K); for(int i = 0; i < M; i++) { scanf("%d %d", &a, &b); link(a - 1, b - 1); } for(int i = 0; i < K; i++) { Search(i); } int nAns = 0; for(int i = 0; i < K; i++) { if(father[i] == i) { nAns++; } } printf("%d\n", nAns); } int main() { //freopen("in.txt", "r", stdin); int nTimes; scanf("%d", &nTimes); while(nTimes--) { Solve(); } return 0; }
相关文章推荐
- TCP长连接与短连接的区别
- php -- 可变变量
- 用SQLYog导出导入数据所遇到的问题
- Return-to-libc攻击实验
- [Mac OSX]MAC读取Excel的Sheet
- Manacher算法-求字符串中最长回文串
- 将ListView中的内容导出到Word和Excel(新)
- django --fields.E304 错误解决方案
- Masonry介绍与使用实践(快速上手Autolayout)
- Unity3d 着色器语法(Shader)
- 做个简单的本地弹幕播放器
- nfc相关
- 安装nginx
- 解决"Could not initialize class android.graphics.Typeface"
- 警察叔叔就是它!那些烦人的空格!
- table滚动条
- Java-mongodb-AggregationOutput(分组、统计)
- AC自动机应用 多模式匹配 多个单词在文章中出现的次数-C语言实现
- 【c++】模拟实现boost库里的scoped_ptr
- matlab中的一些函数(下)注意