1. 程式人生 > >HDU3018,歐拉回路,並查集

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