畅通工程,How Many Tables ACM第九天-图论
生活随笔
收集整理的這篇文章主要介紹了
畅通工程,How Many Tables ACM第九天-图论
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
下面兩題的方法是一樣的都是并查集的應用; 并查集的重點就是找到祖先節點的過程。 重點在這里:int find(int x){ return p[x] == x ? x : p[x] = find( p[x]); } 不斷地遞歸,遞歸到找到自己是自己的祖先為止。并且把它取接到那個祖先節點上;這樣可以節省空間和時間。
Total Submission(s): 15414????Accepted Submission(s): 7560
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.
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 2 5 3 1 2 2 3 4 5 5 1 2 5
Sample Output 2 4
Author Ignatius.L
Source 杭電ACM省賽集訓隊選拔賽之熱身賽
Recommend Eddy
#include <cstdio>
#include <cstring>using namespace std;
#define maxn 1005
int p[maxn];
int a[maxn];
int b[maxn];
int find(int x){return p[x] == x? x : p[x] = find(p[x]);
}
int main(){int n,m;while(scanf("%d %d",&n,&m) && n){memset(p,0,sizeof(p));for(int i = 1;i <= m;i++){scanf("%d %d",&a[i],&b[i]);}int ans = 0;for(int i = 1;i <= n;i++){p[i] = i;}for(int i = 0;i <= m;i++){int x = find(a[i]);int y = find(b[i]);if(x != y){ans++;p[x] = y;}}int answer = n - 1 - ans;printf("%d\n",answer);}return 0;
}
How Many Tables
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 15414????Accepted Submission(s): 7560
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.
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 2 5 3 1 2 2 3 4 5 5 1 2 5
Sample Output 2 4
Author Ignatius.L
Source 杭電ACM省賽集訓隊選拔賽之熱身賽
Recommend Eddy
| 【比賽提醒】BestCoder 你報名了嗎?(點擊報名)? 【科普】什么是BestCoder?如何參加? |
暢通工程Time Limit: 4000/2000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32971????Accepted Submission(s): 17391 Problem Description 某省調查城鎮交通狀況,得到現有城鎮道路統計表,表中列出了每條道路直接連通的城鎮。省政府“暢通工程”的目標是使全省任何兩個城鎮間都可以實現交通(但不一定有直接的道路相連,只要互相間接通過道路可達即可)。問最少還需要建設多少條道路?? Input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是城鎮數目N ( < 1000 )和道路數目M;隨后的M行對應M條道路,每行給出一對正整數,分別是該條道路直接連通的兩個城鎮的編號。為簡單起見,城鎮從1到N編號。? 注意:兩個城市之間可以有多條道路相通,也就是說 3 3 1 2 1 2 2 1 這種輸入也是合法的 當N為0時,輸入結束,該用例不被處理。? Output 對每個測試用例,在1行里輸出最少還需要建設的道路數目。? Sample Input 4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0 Sample Output 1 0 2 998 HintHint Huge input, scanf is recommended. Source 浙大計算機研究生復試上機考試-2005年 Recommend JGShining |
轉載于:https://www.cnblogs.com/lccurious/p/5079882.html
總結
以上是生活随笔為你收集整理的畅通工程,How Many Tables ACM第九天-图论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jQuery对Table一个字段排序
- 下一篇: 使用指针数组实现这两个矩阵的相乘