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

並查集簡單題-pku1611

編輯:C++入門知識

代碼:


[cpp]
#include<stdio.h>  
int father[30001]; 
int count[30001]; 
int i,m,n,first,a,b; 
void setfather(int n) //初始化,將各自fahter設置為本身  

    for(i=0;i<n;i++) 
    { 
        father[i]=i; 
        count[i]=1; 
    } 

int findfather(int i)    

    if(i!=father[i]) 
        father[i]=findfather(father[i]); 
    return father[i]; 

void Untion(int a,int b)   

    int m1=findfather(a); 
    int m2=findfather(b); 
    if(m1==m2) 
        return; 
    if(count[m1]>=count[m2])  //若不相等,則將值賦值給較大的  
    { 
        father[m2]=m1; 
        count[m1]=count[m2]+count[m1]; 
    } 
    else 
    { 
        father[m1]=m2; 
        count[m2]=count[m1]+count[m2]; 
    } 

int main() 

    while(scanf("%d %d",&n,&m)!=EOF&&n>0) 
    { 
        if(n>=0&&n<=30000&&m>=0&&m<=500) 
        { 
            setfather(n); 
            while(m>0) 
            { 
            scanf("%d %d",&a,&first); 
            for(i=0;i<a-1;i++) 
            { 
                scanf("%d",&b); 
                Untion(first,b); 
            } 
            m--; 
            } 
            printf("%d\n",count[findfather(0)]); 
        } 
    } 
 
    return 0; 

#include<stdio.h>
int father[30001];
int count[30001];
int i,m,n,first,a,b;
void setfather(int n) //初始化,將各自fahter設置為本身
{
 for(i=0;i<n;i++)
 {
  father[i]=i;
  count[i]=1;
 }
}
int findfather(int i)  
{
 if(i!=father[i])
  father[i]=findfather(father[i]);
 return father[i];
}
void Untion(int a,int b) 
{
 int m1=findfather(a);
 int m2=findfather(b);
 if(m1==m2)
  return;
    if(count[m1]>=count[m2])  //若不相等,則將值賦值給較大的
 {
  father[m2]=m1;
  count[m1]=count[m2]+count[m1];
 }
 else
 {
  father[m1]=m2;
  count[m2]=count[m1]+count[m2];
 }
}
int main()
{
 while(scanf("%d %d",&n,&m)!=EOF&&n>0)
 {
  if(n>=0&&n<=30000&&m>=0&&m<=500)
  {
   setfather(n);
   while(m>0)
   {
   scanf("%d %d",&a,&first);
   for(i=0;i<a-1;i++)
   {
    scanf("%d",&b);
    Untion(first,b);
   }
   m--;
   }
   printf("%d\n",count[findfather(0)]);
  }
 }

 return 0;
}


 

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