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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

HDU1878-欧拉回路(入门题+并查集)

發(fā)布時間:2024/7/19 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU1878-欧拉回路(入门题+并查集) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:

?????? 判斷一個圖是否是歐拉回路。

歐拉回路:

????????????? 圖 G 的一個回路,若它通過 G 中每條邊一次且僅一次,則稱為歐拉回路。

????????????? 其中有著名的哥尼斯堡七橋問題或一筆畫問題。(原來小時候我們就接觸歐拉回路了,歐拉回路還是蠻常見,蠻簡單的)

解題思路:

?????? 只要每個點都有入度,出度,那么這個圖就是一個歐拉回路。然后再用并查集判斷一個圖是否是連通的即可。

代碼:

?

#include<iostream>?
using?namespace?std;?
?
const?int?MAX=1005;?
?
int?dep[MAX],father[MAX],du[MAX];?
?
int?find_set(int?x)?
{?
????if(x!=father[x])?
????{?
????????father[x]=find_set(father[x]);//回溯壓縮路徑?
????}?
????/*所有的子節(jié)點的根都歸到boss下*/?
????return?father[x];?
}?
?
void?union_set(int?f1,int?f2)?
{?
????f1=find_set(f1);?
????f2=find_set(f2);?
????if(f1==f2)?
????????return?;?
????if(dep[f1]>dep[f2])?
????{?
????????father[f2]=f1;?
????}?
????else?
????{?
????????if(dep[f1]==dep[f2])?
????????{?
????????????dep[f2]++;?
????????}?
????????father[f1]=f2;?
????}?
????return?;?
}?
?
void?init(int?n)?
{?
????for(int?i=0;i<=n;i++)?
????{?
????????father[i]=i;?
????????dep[i]=0;?
????}?
????memset(du,0,sizeof(du));?
}?
?
int?main(void)?
{?
????int?point,edge;?
????int?count,i,u,v;?
????bool?exist;?
????while(scanf("%d",&point),point)?
????{?
????????scanf("%d",&edge);?
????????init(point);?
????????for(i=0;i<edge;i++)?
????????{?
????????????scanf("%d%d",&u,&v);?
????????????du[u]++;?
????????????du[v]++;?
????????????union_set(u,v);????????
????????}?
????????exist=1;?
????????for(i=0;i<=point;i++)?
????????{?
????????????if(du[i]&&du[i]%2!=0)?
????????????{?
?????????????
????????????????exist=0;?????
????????????????break;?
????????????}?
?????????
????????}?
????????for(i=0,count=0;i<=point;i++)?
????????{?
????????????if(du[i]&&i==find_set(i))?
????????????????count++;?
????????}?
????????if(exist)?
????????{?
????????????if(count!=1)?
????????????????cout<<"0"<<endl;?
????????????else?
????????????????cout<<"1"<<endl;?
????????}?
????????else?
????????????cout<<"0"<<endl;?
????}?
????return?0;?
}?

轉(zhuǎn)載于:https://www.cnblogs.com/cchun/archive/2011/08/20/2520119.html

總結(jié)

以上是生活随笔為你收集整理的HDU1878-欧拉回路(入门题+并查集)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。