小鑫的城堡

來源:互聯網
上載者:User

標籤:資料結構   c語言   演算法   並查集   

題目描述從前有一個國王,他叫小鑫。有一天,他想建一座城堡,於是,設計師給他設計了好多簡易圖紙,主要是房間的連通的圖紙。小鑫希望任意兩個房間有且僅有一條路徑可以相通。小鑫現在把設計圖給你,讓你幫忙判斷設計圖是否符合他的想法。比如下面的例子,第一個是合格,但是,第二個不符合,因為從5到4有兩條路徑(5-3-4和5-6-4)。

輸入多組輸入,每組第一行包含一個整數m(m < 100000),接下來m行,每行兩個整數,表示了一條通道串連的兩個房間的編號。房間的編號至少為1,且不超過100000。
輸出每組資料輸出一行,如果該城堡符合小鑫的想法,那麼輸出"Yes",否則輸出"No"。樣本輸入
52 52 31 33 64 661 21 33 43 55 66 4
樣本輸出
YesNo

#include<stdio.h>#include<string.h>#define N 100001int bin[N],a[N];int find(int x){    int i,j,r;    r=x;    while(r!=bin[r])    {        r=bin[r];    }    i=x;    while(i!=r)    {        j=bin[i];        bin[i]=r;        i=j;    }    return r;}void merge(int x,int y){    int fx,fy;    fx=find(x);    fy=find(y);    if(fx!=fy)        bin[fx]=fy;}int main(){   int n,i,c,d;   int max;   while(~scanf("%d",&n))   {       max=0;       memset(a,0,sizeof(a));       for(i=1;i<=100001;i++)        bin[i]=i;       for(i=0;i<n;i++)       {           scanf("%d%d",&c,&d);           merge(c,d);           if(max<c)            max=c;           if(max<d)            max=d;           a[c]=1;           a[d]=1;       }       int k=0;       int m=0;       for(i=1;i<=max;i++)       {           if(a[i]==1)            k++;           if(bin[i]==i&&a[i]==1)            m++;       }       if(m==1&&k==n+1)       {           printf("Yes\n");       }       else       {           printf("No\n");       }   }    return 0;} 



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

小鑫的城堡

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.