杭電Problem1878 歐拉回路 並查集 + 歐拉回路
歐拉回路
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11814 Accepted Submission(s): 4348
Problem Description 歐拉回路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定一個圖,問是否存在歐拉回路?
Input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數N ( 1 < N < 1000 )和邊數M;隨後的M行對應M條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點的編號(節點從1到N編號)。當N為0時輸入結
束。
Output 每個測試用例的輸出佔一行,若歐拉回路存在則輸出1,否則輸出0。
Sample Input 3 3 1 2 1 3 2 3 3 2 1 2 2 3 0
Sample Output 1 0
Author ZJU 對於一個無向圖,其為歐拉回路的充要條件為其是連通圖,且頂點的度為偶數。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX_N 1005 #define MIN(a, b) (a > b): a? b using namespace std; int par[MAX_N]; int d[MAX_N]; void init(int x) { for (int i = 0; i <= x; i++) { par[i] = i; d[i] = 0; } } int find(int x) { if (x == par[x]) return x; else return find(par[x]); } void unite(int x, int y) { int fx = find(x); int fy = find(y); if (fx != fy){ par[fy] = fx; } } int main() { int n, m, a, b; while (scanf("%d", &n) , n) { init(n); scanf("%d", &m); for (int i = 0; i < m; i++) { scanf("%d %d", &a, &b); unite(a, b); d[a]++; d[b]++; } int tree = 0; for (int i = 1; i <= n; i++) { if (i == par[i]) { tree++; } } if (tree != 1) { printf("0\n"); continue; } for(int i = 1; i <= n; i++) { if(d[i] % 2 != 0) { tree = 0; break; } } if(tree) printf("1\n"); else printf("0\n"); } }
相關推薦
杭電Problem1878 歐拉回路 並查集 + 歐拉回路
問題地址 歐拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11814 Accepted Su
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
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]
HDU:1878 歐拉回路(並查集+歐拉回路)
1 0 題義就是在給定的圖中判定是否存在歐拉回路。 圖G的一個迴路,若它恰通過G中每條邊一次,則稱該回路為尤拉(Euler)迴路。 具有歐拉回路的圖稱為尤拉圖(簡稱E圖)。 這裡總結下各種圖的判定的方法: 1.無向圖中:所給定的圖為連通圖,且所有節點的度為偶數; 2.有向圖中:所給定的圖
LOJ-10108(歐拉回路+並查集)一個圖至少用幾筆畫成
turn stream scanf spa iostream () memset int get 題目鏈接:傳送門 思路: 用並查集統計出每個區塊奇數個節點的個數x,每個區塊對筆畫的貢獻是max(x/2,1); 然後每個區塊求和即可。 #include<iostr
Play on words 之並查集+歐拉回路解題報告
Play on Words Time Limit: 10000/5000 MS(Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3754 Accepted S
10129 Play on Words-----並查集+尤拉路!!!
題意:判斷所有字串是不是可以連在一起,實際上就是判斷所構造的有向圖是否存在歐拉回路或者尤拉圖; #include<iostream> #include<cstdio> #include<cmath> #include<cstri
輸出歐拉路徑(並查集+佛羅來算法)
ace can tac merge amp mes 奇數 記錄 max #include<bits\stdc++.h> using namespace std; const int maxn=100; stack<int>s;/*輸出歐拉回
HDU 1116.Play on Words【並查集+尤拉圖】【5月16】
Play on Words Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7111 Accepte
2018杭電多校第二場1003(DFS,歐拉回路)
歐拉路 style ear bits its space nbsp 記錄 一個隊列 #include<bits/stdc++.h>using namespace std;int n,m;int x,y;int num,cnt;int degree[100007]
HDU 3018 Ant Trip (並查集求連通塊數+歐拉回路)
http 道路 遇到 連通塊 ems ble define ant trip 註意 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=3018 題目大意:有n個點,m條邊,人們希望走完所有的路,且每條道路只能走一遍。至少要將人們
hdu1878-並查集,歐拉回路
flag space 回路 ostream mes eof break != fine 純裸題。。寫著方便理解。。。 題意:判斷一個無向圖是否存在歐拉回路。。。 解題思路:並查集判斷一下是否聯通,然後再判斷一下點的度數是否為偶數就行了; #include<iostr
HDU-1878-歐拉回路(並查集)
歐拉回路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定一個圖,問是否存在歐拉回路? Input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數N ( 1 < N < 1000 )和邊數M;隨後的M行對應M條邊,每行給出一對
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
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