HDU3018,歐拉回路,並查集
求歐拉回路的第一道題,是看的別人的題解做的。
思路就是:對於每個連通塊來說,如果該連通塊的所有點的入度為偶數,那麼就可以一筆畫完該連通塊。如果為奇數,那麼需要的筆畫為奇度數頂點之和的一半,比如兩個奇數頂點,那麼需要1,四個奇數頂點,那麼需要2…
程式碼如下:
/*************************************************************************
> File Name: main.cpp
> Author:Eagles
> Mail:None
> Created Time: 2018年09月17日 星期一 09時53分41秒
> Description:HDU3018,歐拉回路
************************************************************************/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
#define N 100005
int par[N];
int in_deg[N];//記錄每個頂點的入度
int s_e[N];//記錄每個連通塊中奇數頂點的個數
int n,m;
int find_par(int x)
{
return x==par[x]?x:par[x]=find_par(par[x]);
}
void unite(int x, int y)
{
int fx=find_par(x);
int fy=find_par(y);
par[fy]=fx;
}
void init()
{
for (int i=0; i<N ;i++)
par[i]=i;
memset(in_deg,0,sizeof(in_deg));
memset(s_e,0,sizeof(s_e));
for (int i=0; i<m; i++)
{
int a,b;
scanf("%d%d",&a,&b);
in_deg[a]++;
in_deg[b]++;
unite(a,b);
}
for (int i=1; i<=n; i++)
{
if (in_deg[i]&1)//如果為奇度數頂點
s_e[find_par(i)]++;//連通塊的奇數頂點+1
}
}
int solve()
{
int ans=0;
for (int i=1; i<=n; i++)
{
if (par[i]==i&&in_deg[i])//忽略孤立的點
{
if (s_e[i]==0)
ans++;
else
ans+=s_e[i]/2;
}
}
return ans;
}
int main()
{
while (~scanf("%d%d",&n,&m))
{
init();
printf("%d\n",solve());
}
return 0;
}
相關推薦
HDU3018,歐拉回路,並查集
求歐拉回路的第一道題,是看的別人的題解做的。 思路就是:對於每個連通塊來說,如果該連通塊的所有點的入度為偶數,那麼就可以一筆畫完該連通塊。如果為奇數,那麼需要的筆畫為奇度數頂點之和的一半,比如兩個奇數
尤拉路徑,歐拉回路,並查集
1.1 定義 對於圖G,若存在一條路徑,經過G中每條邊有且僅有一次,稱這條路為尤拉路徑;如果存在一條迴路經過G每條邊有且僅有一次,稱這條迴路為歐拉回路。具有歐拉回路的圖成為尤拉圖。 1.2 判斷尤拉路徑是否存在的方法 有向圖:圖連通,且只有一個頂點出度大入度1,有一
HDU-1878-歐拉回路(並查集)
歐拉回路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定一個圖,問是否存在歐拉回路? Input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數N ( 1 < N < 1000 )和邊數M;隨後的M行對應M條邊,每行給出一對
CodeForces 209C Trails and Glades(歐拉回路判斷+並查集計算聯通分量)
題意:判斷能否構成歐拉回路,不能的話輸出最小需要新增多少條邊 題解:並查集處理出聯通分量,輸入時處理出奇度數點個數,結果即為 奇度數點個數/2+不含奇度數點的聯通分量個數,1節點自動算作一個聯通分量 不管是否有邊連線 #include <cstdio> #i
HDU1878 歐拉回路【並查集】
歐拉回路Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16538 Accepted Submission(s
HDU:1878 歐拉回路(並查集+歐拉回路)
1 0 題義就是在給定的圖中判定是否存在歐拉回路。 圖G的一個迴路,若它恰通過G中每條邊一次,則稱該回路為尤拉(Euler)迴路。 具有歐拉回路的圖稱為尤拉圖(簡稱E圖)。 這裡總結下各種圖的判定的方法: 1.無向圖中:所給定的圖為連通圖,且所有節點的度為偶數; 2.有向圖中:所給定的圖
hdu-1878-歐拉回路(並查集||dfs)&&歐拉回路
歐拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15494 Accepted Submissi
jzoj5895 【NOIP2018模擬10.5】旅遊 (求歐拉回路,性質)
題目描述 分析 一個無向圖存在歐拉回路當且僅當所有的點的度數為偶數,所以需要在每一對奇點之間連一條邊然而觀察這題這題的邊權,發現所有比某條邊小的邊之和比這條邊小。那也就是說最短路必定在最小生成樹上。這就變成了最小生成樹上的配對問題。只要保證不走重邊,結果一定是一樣的。一棵子
歐拉回路,尤拉道路,七橋問題,Python程式碼實現
在尤拉道路中,進和出是對應的,除了起點和終點外,其他點的進出次數應該相等。也就是說,除起點和終點外其他各點的度數應該是偶數。 如果奇點不存在,則可以從任意點出發,最終一定會回到起點,稱為歐拉回路
歐拉回路,尤拉路徑,尤拉圖詳解
歐拉回路定義: 歐拉回路:每條邊恰好只走一次,並能回到出發點的路徑 尤拉路徑:經過每一條邊一次,但是不要求回到起始點 首先看歐拉回路存在性的判定(這裡先不說混合圖): 一、無向圖 每個頂點的度數都是偶數,則存在歐拉回路。 二、有向圖(所有邊都是單向的) 每個節頂
hdu1878-並查集,歐拉回路
flag space 回路 ostream mes eof break != fine 純裸題。。寫著方便理解。。。 題意:判斷一個無向圖是否存在歐拉回路。。。 解題思路:並查集判斷一下是否聯通,然後再判斷一下點的度數是否為偶數就行了; #include<iostr
HDU 3018 Ant Trip (並查集求連通塊數+歐拉回路)
http 道路 遇到 連通塊 ems ble define ant trip 註意 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 題目大意:有n個點,m條邊,人們希望走完所有的路,且每條道路只能走一遍。至少要將人們
HDU-3018-Ant Trip-歐拉回路+並查集
for its tin bits ems log set https 回路 Ant Trip 這道題一開始覺得是並查集,穩了;wa 才想起來有兩個重要條件 1、完全獨立的點不算; 2、把點連起來的邊(路)不能重復走:就是要判斷歐拉回路,即每個點的度數是不是偶數; 遍歷每個
POJ-2513 Colored Sticks---歐拉回路+並查集+字典樹
lan [] 復雜 題意 沒有 fin pre else 解題思路 題目鏈接: https://vjudge.net/problem/POJ-2513 題目大意: 給一些木棍,兩端都有顏色,只有兩根對應的端點顏色相同才能相接,問能不能把它們接成一根木棍 解題思路: 題意不難
hdu-1116(歐拉回路+並查集)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1116 思路:將字串的頭元素和尾元素視為圖的x,y節點,然後合併x,y。 如果這個圖不連通,則門不能開啟,如果路徑是歐拉回路或者尤拉通路,則門可以開啟。 #include<iostream>
HDU-1116-Play on Words (並查集 +歐拉回路)
原題連結: http://acm.hdu.edu.cn/showproblem.php?pid=1116 Some of the secret doors contain a very interesting word puzzle. The team of archaeologists
Gym 101879C Promenade by the lake —— dfs+並查集 找構成歐拉回路需要新增的邊
The city of Porto will host the ICPC World Finals in 2019. One of the secret touristic spots in the city is the so-called “lake of
Ant Trip(歐拉回路+並查集)
Ant Trip 題目描述 原題來自:2009 Multi-University Training Contest 12 - Host by FZU
poj 2513 歐拉回路+並查集判斷是否聯通+Trie樹
http://poj.org/problem?id=2513 最初看到 第一感覺---map 一看250000的資料量 果斷放棄 然後記得以前看過,trie代替map,尤其當資料量特別大的時候 學到了: 1、Trie代替map的思想,可以在單詞結尾的tree[i][tk]
杭電Problem1878 歐拉回路 並查集 + 歐拉回路
問題地址 歐拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11814 Accepted Su