深海探險 51Nod 1535

2021-08-07 18:23:27 字數 1264 閱讀 7953

很久很久以前的一天,一位美男子來到海邊,海上狂風大作。美男子希望在海中找到美人魚,但是很不幸他只找到了章魚怪。

然而,在世界的另一端,人們正在積極的收集怪物的行為資訊,以便研製出強大的**來對付章魚怪。由於**的多發,以及惡劣的天氣,使得我們的衛星不能很好的定位怪物,從而不能很好的命中目標。第一次射擊的分析結果會反映在一張由n個點和m條邊組成的無向圖上。現在讓我們來確定這張圖是不是可以被認為是章魚怪。

為了簡單起見,我們假設章魚怪的形狀是這樣,他有乙個球形的身體,然後有很多觸鬚連線在他的身上。可以表現為一張無向圖,在圖中可以被認為由三棵或者更多的樹(代表觸鬚)組成,這些樹的根在圖中處在乙個環中(這個環代表球形身體)。

題目保證,在圖中沒有重複的邊,也沒有自環。

input

單組測試資料 

第一行給出兩個數,n表示圖中的點的個數,m表示圖中邊的數量。 (1≤ n≤100,0≤ m≤ n*(n-1)/2 ) 

接下來m行給出邊的資訊, 

每一行有兩上數x,y (1≤ x,y≤ n,x≠y) 

表示點x和點y之間有邊相連。每一對點最多有一條邊相連,點自身不會有邊到自己。

output

共一行,如果給定的圖被認為是章魚怪則輸出"fhtagn!"(沒有引號),否則輸出"no"(沒有引號)。

sample input

6 6

6 36 4

5 12 5

1 45 4

sample output

fhtagn!
思路:題意 給你m組資料a,b(1到n)。判斷是否只含有乙個圓並且聯通分支數為1的圖。

並查集,是一種簡單高效的方法,用來解決這個問題很合適。本題就是使用並查集做的。(不懂的可以上網查一下並查集)

#include #include int father[110];

int n,m,flag;

void print()

int find(int x)

void merge(int x,int y)

int main()

if(n>m)

int cont=0;

for(int i=1; i<=n; i++)

if(father[i]==i)

cont++;

if(flag==1&&cont==1)

printf("fhtagn!\n");

else printf("no\n");

}return 0;

}

A 深海探險 51Nod 1535

很久很久以前的一天,一位美男子來到海邊,海上狂風大作。美男子希望在海中找到美人魚,但是很不幸他只找到了章魚怪。然而,在世界的另一端,人們正在積極的收集怪物的行為資訊,以便研製出強大的 來對付章魚怪。由於 的多發,以及惡劣的天氣,使得我們的衛星不能很好的定位怪物,從而不能很好的命中目標。第一次射擊的分...

A 深海探險 51Nod 1535

很久很久以前的一天,一位美男子來到海邊,海上狂風大作。美男子希望在海中找到美人魚,但是很不幸他只找到了章魚怪。然而,在世界的另一端,人們正在積極的收集怪物的行為資訊,以便研製出強大的 來對付章魚怪。由於 的多發,以及惡劣的天氣,使得我們的衛星不能很好的定位怪物,從而不能很好的命中目標。第一次射擊的分...

51Nod 1535深海探險(並查集,好題)

很久很久以前的一天,一位美男子來到海邊,海上狂風大作。美男子希望在海中找到美人魚,但是很不幸他只找到了章魚怪。然而,在世界的另一端,人們正在積極的收集怪物的行為資訊,以便研製出強大的 來對付章魚怪。由於 的多發,以及惡劣的天氣,使得我們的衛星不能很好的定位怪物,從而不能很好的命中目標。第一次射擊的分...