這是一道判斷有沒有成環的並查集的題,就是每兩個點要有唯一的路可到達。不太懂並查集的可以看一下這篇部落格傳送門。
說一下這道題的思路,首先要判斷有沒有成環的話,要先想清楚什麼時候會成環。
比如以這個圖為例,我們輸入1和2,1和3,2和4,3和4,當輸入完2和4的時候現在pre陣列裡有pre[2]=1,pre[3]=1,pre[4]=1,當再輸入3和4的時候,會發現3和4的根節點一樣,這就說明了出現了環,而在沒有成環的圖中,不會出現兩個點的根節點相同這種情況。
這道題在做的時候就要先判斷一下有沒有剛才所說的那種情況,有的話肯定是有環存在了,還有就是最後要計算一下根節點數,如果不為1的話,就說明這個圖是不連通的,所以也不符合題意。
ac**:
#include #include #include using namespace std;
const int maxn = 100005;
int pre[maxn];
bool vis[maxn];
int n,m,a,b,flag;
void init()
}int find(int x)
return pre[x];
}void merge(int x,int y)
else flag = 1; // 當出現有兩個點的根節點相同就會有環出現
}int main()
init();
flag = 0;
vis[n] = 1;
vis[m] = 1;
merge(n,m);
while(~scanf("%d%d",&a,&b))
if(flag)
else
if(sum == 1)printf("yes\n");
else printf("no\n");
}} return 0;
}
hdu 1272 小希的迷宮(並查集)
題意 略分析 由於是無向圖且是一棵樹,也就是n個節點,n 1條邊,題目要求是每個定點都是雙連通,也就是所有頂點都在乙個強連通分量裡面,這裡可以使用求ssc的演算法,但是由於十無向圖使用並查集的變成複雜度降低了很多,trick 0 0 no.code include include include i...
HDU 1272 小希的迷宮(並查集)
小希的迷宮 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit go back status description 上次gardon的迷宮城堡小希玩了很久 見problem b 現在她也想設計乙個迷宮讓ga...
HDU1272 小希的迷宮 並查集
題目大意 給出乙個迷宮,如果他是連通的且沒有平行路徑,輸出yes,否則輸出no。並查集紀錄每個點的連通狀態,對於每輸入的兩個點,合併他們的同時,看他們是否有相同的父親,若有,則不符合題意。資料輸入完之後,再判斷一下根結點是否唯一便可知該迷宮是否連通了。include include include ...