27行代码AC_How Many Tables HDU - 1213(并查集讲解)
生活随笔
收集整理的這篇文章主要介紹了
27行代码AC_How Many Tables HDU - 1213(并查集讲解)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
勵志用少的代碼做高效表達
分析與思路
n個人吃飯,只能熟人和熟人坐在一起,否則就一個人坐一桌。 給定m個關系(m對熟人),問最少需要多少張桌子。
純粹考查的并查集模板的題, 給定m個關系就代表了m個集合, 將有相同元素的集合和并, 最后計算集合的個數即可。
視頻講解——>傳送門
這里分享一下我學習新算法的方法:
#include<bits/stdc++.h> using namespace std; int per[1010];int find(int x) {if(x==per[x]) return x;per[x] = find(per[x]);return per[x]; }void Union(int a, int b) { //建立并集 int t1 = find(a);int t2 = find(b);if(t1 != t2) per[t1] = t2; }int main() {ios::sync_with_stdio(false);int T; cin>>T; while(T--) {int n, m; cin>>n>>m;for(int i = 1; i <= n; i++) per[i] = i; while(m--) {int a, b; cin>>a>>b;Union(a, b); //對所有序對建立并 } int ans = n;for(int i = 1; i <= n; i++) if(per[i] != i) ans--;cout << ans << endl;} return 0; }
如果這篇文章對你產生了幫助,就請給博主一個贊吧!讓更多的人看到它。
總結
以上是生活随笔為你收集整理的27行代码AC_How Many Tables HDU - 1213(并查集讲解)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 18行代码AC_排序 HDU - 110
- 下一篇: (最新合集)计算机网络谢希仁第七版 第一