| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:经典并查集,16msIn Reply To:经典并查集,16ms Posted by:Niyada at 2018-08-24 15:31:05 > #include <iostream>
> #include <cstdio>
> #include <cmath>
> using namespace std;
> const int maxn = 30010;
> int a[maxn],f[maxn];
> int findx(int x){
> return f[x]<0?x:f[x]=findx(f[x]);
> }
> void bing(int a,int b){
> int t1 = findx(a);
> int t2 = findx(b);
> if(t1!=t2){
> if(t2==0){
> f[t2]+=f[t1];
> f[t1] = t2;
> }
> else{
> f[t1]+=f[t2];
> f[t2] = t1;
> }
> }
> }
> int main(){
> int n,m;
> while(scanf("%d%d",&n,&m)!=EOF){
> if(n==0&&m==0)
> break;
> for(int i=0;i<n;++i) f[i] = -1;
> for(int i=1;i<=m;++i){
> int k;
> scanf("%d",&k);
> int t;
> for(int i=1;i<=k;++i){
> if(i==1){
> scanf("%d",&t);
> continue;
> }
> int s;
> scanf("%d",&s);
> bing(s,t);
> }
> }
> cout << abs(f[0])<<endl;
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator