日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51nod 1535 深海探险【思维+并查集】

發布時間:2024/3/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51nod 1535 深海探险【思维+并查集】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1535?深海探險 題目來源:? CodeForces 基準時間限制:1?秒 空間限制:131072?KB 分值:?40? 難度:4級算法題

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

?

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

?

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

?

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


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"(沒有引號)。 Input示例 6?6 6?3 6?4 5?1 2?5 1?4 5?4 Output示例 FHTAGN!

思路:


1、通過仔細讀題我們能夠知道,這個題就是在讓你判斷一個無向圖,是否只包含一個環&&是一個連通圖。


2、那么對于連通圖的判定以及環的個數的判定,我們其實都可以通過并查集來搞定。一開始無腦想著去Dfs.而且點數也不多,細心想想其實不必要Dfs.我們并查集直接判斷即可。

對于兩個點,如果其在一個集合中了已經,那么這個邊一定是成環邊,對于成環邊的個數進行判定,只有這種邊的個數為1的時候,并且他是一個連通圖的時候,才能判斷他是一條章魚。


Ac代碼:

#include<stdio.h> #include<string.h> using namespace std; int f[1005]; int find(int a) {int r=a;while(f[r]!=r)r=f[r];int i=a;int j;while(i!=r){j=f[i];f[i]=r;i=j;}return r; } int merge(int a,int b) {int A,B;A=find(a);B=find(b);if(A!=B){f[B]=A;} } int main() {int n,m;while(~scanf("%d%d",&n,&m)){for(int i=1;i<=n;i++)f[i]=i;int cont=0;for(int i=0;i<m;i++){int x,y;scanf("%d%d",&x,&y);if(find(x)==find(y)){cont++;}else merge(x,y);}int root=0;for(int i=1;i<=n;i++){if(f[i]==i)root++;}if(root==1&&cont==1){printf("FHTAGN!\n");}else printf("NO\n");} }






總結

以上是生活随笔為你收集整理的51nod 1535 深海探险【思维+并查集】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。