HDOJ 1213 How Many Tables 1232 畅通工程(并查集基础,水)
来源:互联网 发布:spss软件最新版 编辑:程序博客网 时间:2024/05/21 22:52
How Many Tables
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 28401 Accepted Submission(s): 14052
Problem Description
Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to stay with strangers.
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
One important rule for this problem is that if I tell you A knows B, and B knows C, that means A, B, C know each other, so they can stay in one table.
For example: If I tell you A knows B, B knows C, and D knows E, so A, B, C can stay in one table, and D, E have to stay in the other one. So Ignatius needs 2 tables at least.
Input
The input starts with an integer T(1<=T<=25) which indicate the number of test cases. Then T test cases follow. Each test case starts with two integers N and M(1<=N,M<=1000). N indicates the number of friends, the friends are marked from 1 to N. Then M lines follow. Each line consists of two integers A and B(A!=B), that means friend A and friend B know each other. There will be a blank line between two cases.
Output
For each test case, just output how many tables Ignatius needs at least. Do NOT print any blanks.
Sample Input
25 31 22 34 55 12 5
Sample Output
24
Author
Ignatius.L
题目比较简单,直接套并查集,查询集合数,我的代码还不够优化
#include <iostream>using namespace std;const int MAX_N=1005;int par[MAX_N];int t,x,y,m,n;void init(int n)//初始化{ for(int i=0;i<=n;i++) { par[i]=i; }}int find(int x){ return par[x]==x?x:(par[x]=find(par[x]));//路径压缩}void unit(int x,int y){ x=find(x); y=find(y); if(x==y) return; else par[x]=y;}/*bool same(int x,int y){ return find(x)==find(y);}*/int main(){ cin>>t; while(t--) { cin>>n>>m; init(n); for(int i=0;i<m;i++) { cin>>x>>y; unit(x,y); } int sum=0; for(int i=1;i<=n;i++) { if(par[i]==i) sum++; } cout<<sum<<endl; } return 0;}
1232可参考1213,一样的思路
0 0
- HDOJ 1213 How Many Tables 1232 畅通工程(并查集基础,水)
- HDOJ 1213 How Many Tables(基础并查集)
- HDU-畅通工程-1232(并查集)How Many Tables(1213)
- HDOJ 1213 How Many Tables(并查集)
- HDOJ 1213 How Many Tables(并查集)
- HDOJ 1213 How Many Tables(并查集)
- HDOJ 题目1213 How Many Tables(并查集基础)
- hdoj How Many Tables【并查集】
- ACM_HDU 1213 How Many Tables(基础并查集)
- HDOJ--1213--How Many Tables【并查集】
- HDOJ 1213 How Many Tables——并查集
- Hdoj 1213 How Many Tables 【并查集】
- hdoj-1213-How Many Tables【并查集】
- HDOJ 1213 How Many Tables(并查集)
- hdoj 1213 How Many Tables 【并查集】
- HDOJ 1213 how many tables (并查集)
- hdoj 1213 How Many Tables【并查集】
- HDOJ 1213 How Many Tables【并查集】
- 小马哥和数列
- Java基础知识_day03_(选择流程控制语句,循环流程控制语句,控制循环语句)
- spring ioc 源码详解01
- 剑指Offer 7 用两个栈实现队列
- leetcode128. Longest Consecutive Sequence
- HDOJ 1213 How Many Tables 1232 畅通工程(并查集基础,水)
- 常用Java代码汇总
- vector容器中resize与reserve的区别
- 【面试题】剑指Offer-28-字符串的全排列
- 消息和消息处理之消息循环
- mac下 ndk_build: command not found
- cin和cout格式控制
- Pixhawk原生固件PX4之调节怠速
- leveldb源码剖析--编码