HDU1878-欧拉回路(入门题+并查集)
生活随笔
收集整理的這篇文章主要介紹了
HDU1878-欧拉回路(入门题+并查集)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:
?????? 判斷一個(gè)圖是否是歐拉回路。
歐拉回路:
????????????? 圖 G 的一個(gè)回路,若它通過(guò) G 中每條邊一次且僅一次,則稱(chēng)為歐拉回路。
????????????? 其中有著名的哥尼斯堡七橋問(wèn)題或一筆畫(huà)問(wèn)題。(原來(lái)小時(shí)候我們就接觸歐拉回路了,歐拉回路還是蠻常見(jiàn),蠻簡(jiǎn)單的)
解題思路:
?????? 只要每個(gè)點(diǎn)都有入度,出度,那么這個(gè)圖就是一個(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é)點(diǎn)的根都?xì)w到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-欧拉回路(入门题+并查集)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 探Button控件的Click事件发生始
- 下一篇: Unity3d--美工建模须知【转htt