程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu1856並查集

hdu1856並查集

編輯:C++入門知識

[cpp] 
#include<cstdio> 
#include<string.h> 
using namespace std; 
int num[1000006],con[1000006]; 
bool vis[1000006]; 
int find(int x) 

  return x==num[x]?x:num[x]=find(num[x]); 

 
int main() 
{  int n; 
    while(~scanf("%d",&n)) 
    {if(n==0) 
    {printf("1\n");continue;} 
       for(int i=0;i<=1000005;++i) 
        { 
          num[i]=i; 
           vis[i]=0; 
          con[i]=1; 
        } 
    int a,b,x,y,max=0; 
    while(n--) 
    { 
      scanf("%d%d",&a,&b); 
      vis[a]=vis[b]=1; 
      x=find(a),y=find(b); 
      if(x!=y) 
      { 
        num[x]=y; 
        con[y]+=con[x]; 
       } 
     } 
         for(int i=1;i<=1000005;++i) 
         { 
           if(vis[i]) 
           { 
             x=find(i); 
             max=con[x]; 
             break; 
           } 
         } 
         for(int i=1;i<=10005;++i) 
         { 
           if(vis[i]&&find(i)!=x) 
           { 
             if(con[find(i)]>max) 
                 max=con[find(i)]; 
           } 
         } 
         printf("%d\n",max); 
    } 
 return 0; 


作者:Java_beginer1

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved