hdoj 1325 Is It A Tree? 【並查集】

來源:互聯網
上載者:User

標籤:並查集

做了一上午,終於ac了 wa了一次主要是忘了還有環!!! 

主要是運用並查集知識,又複習了一次!!

思路:輸入之後找能不能成環,成環就不是,其次還要判斷是不是有兩個父節點,如果有兩個父節點也不是,之後就找相關的祖先就好了;

還要注意:如果只有一個節點,也是樹,如果有兩個或多個根節點也不是樹;如果沒有根節點也不是

連結http://acm.hdu.edu.cn/showproblem.php?pid=1325

代碼

#include<stdio.h>int fat[1000];int father( int n ) //尋找祖先{    if( fat[n] != n ) fat[n] = father(fat[n]);    return fat[n];} int main(){    int i, j, n, m, a[1000], b[1000], v = 1;    while( 1 ){        for( i = 0; i < 1000; i ++ )        fat[i] = i;        int flag = 0;        scanf( "%d%d", &a[0], &b[0] );        if( a[0]< 0&&b[0]< 0 ) break;        fat[b[0]] = a[0];//由題意可知fat[b[i]] = a[i];        i = 1;        while( scanf("%d%d", &a[i], &b[i]), a[i]||b[i] ){            if( flag == 0 ){ //如果flag=1那就表明成環了,或者有兩個父節點            if( fat[a[i]] == b[i] ){flag = 1; //判斷是不是成環continue;}            if( fat[b[i]] != b[i] ) {flag = 1;//判斷是不是有兩個父節點 continue;}            if( fat[a[i]]!= a[i] )             fat[a[i]] = father(a[i]);            fat[b[i]] = a[i];}else{fat[b[i]] = a[i];}i++;        }        for( j = 0; j < i; ++ j ) //判斷有沒有祖先(根節點)        if( fat[a[j]] == a[j] ) break;;        if( i == j  )         flag = 1;        if( flag ){             printf( "Case %d is not a tree.\n", v++ );             continue;        }        else{            if( i == 1 ){ //如果只有一組                 printf( "Case %d is a tree.\n", v++ );                 continue;            }            for( j  = 1; j < i; ++ j ) //判斷是不是有多個根節點            if( fat[a[j]] != fat[a[0]] ){                  printf( "Case %d is not a tree.\n", v++ );                 break;            }            if( j == i )             printf( "Case %d is a tree.\n", v++ );        }    }    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.