並查集+uva10608
求聯通子圖中節點的個數,並查集直接搞定。
下面是程式碼:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=30030;
int N,M;
int pre[maxn],rank[maxn],cnt[maxn];
void init()
{
for(int i=0;i<=N;i++)
{
rank[i]=0;
pre[i]=i;
cnt[i]=0;
}
}
int find(int x)
{
if(pre[x]==x)
return x;
return pre[x]=find(pre[x]);
}
void unite(int a,int b)
{
int x=find(a);
int y=find(b);
if(x==y) return;
if(rank[x]<rank[y])
pre[x]=y;
else
{
pre[y]=x;
if(rank[x]==rank[y])
rank[x]++;
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int t;
cin>>t;
while(t--)
{
int x,y;
cin>>N>>M;
init();
for(int i=0;i<M;i++)
{
cin>>x>>y;
unite(x,y);
}
for(int i=1;i<=N;i++)
{
int x=find(i);
cnt[x]++;
}
int max1=0;
for(int i=1;i<=N;i++)
if(cnt[i]>max1) max1=cnt[i];
cout<<max1<<endl;
}
return 0;
}
相關文章
- 並查集到帶權並查集並查集
- 【並查集】【帶偏移的並查集】食物鏈並查集
- 並查集(一)並查集的幾種實現並查集
- 3.1並查集並查集
- 並查集(小白)並查集
- 並查集(Union Find)並查集
- 並查集應用並查集
- The Door Problem 並查集並查集
- 並查集練習並查集
- 並查集的使用並查集
- 並查集—應用並查集
- 寫模板, 並查集。並查集
- 並查集跳躍並查集
- 各種並查集並查集
- 食物鏈(並查集)並查集
- 並查集(二)並查集的演算法應用案例上並查集演算法
- The Suspects-並查集(4)並查集
- [leetcode] 並查集(Ⅰ)LeetCode並查集
- [leetcode] 並查集(Ⅱ)LeetCode並查集
- [leetcode] 並查集(Ⅲ)LeetCode並查集
- 並查集演算法並查集演算法
- 並查集深度應用並查集
- 【轉】種類並查集並查集
- 並查集java實現並查集Java
- 並查集-Java實現並查集Java
- 並查集題目合集並查集
- 並查集以及應用並查集
- 並查集的應用並查集
- 暢通工程(並查集)並查集
- (Day3)並查集並查集
- 並查集擴充套件並查集套件
- 簡單易懂的並查集演算法以及並查集實戰演練並查集演算法
- 關於並查集問題並查集
- 並查集的應用2並查集
- 並查集の進階用法並查集
- 並查集(UnionFind)技巧總結並查集
- Wireless Network(並查集(裸))並查集
- 並查集應用總結並查集