1. 程式人生 > >杭電ACM1878——歐拉回路

杭電ACM1878——歐拉回路

簡單的歐拉回路,如題。

歐拉回路的判斷:

1.在有向圖中:首先必要的條件是圖連通,所以頂點的入度都等於出度。

2.在無向圖中:首要條件還是圖連通,其次就是所以頂點都是偶數度(該頂點的度為偶數)

這一題是無向圖,所以根據判斷方法來寫,很簡單,判定就不證明了。

我是用並查集來判斷圖是否連通的。

下面是AC的程式碼:

#include <iostream>
#include <cstring>
using namespace std;

int par[1005], degree[1005];

int finds(int x)
{
	if(x == par[x])
		return x;
	else
		return par[x] = finds(par[x]);
}

int main()
{
	int a, b, n, m, i;
	while(cin >> n)
	{
		if(n == 0)
			break;
		for(i = 0; i <= n; i++)
			par[i] = i;
		memset(degree, 0, sizeof(degree));
		cin >> m;
		for(i = 0; i < m; i++)
		{
			cin >> a >> b;
			degree[a]++;               //該點度+1
			degree[b]++;
			int x = finds(a);
			int y = finds(b);
			if(x != y)                 //合併
				par[x] = y;
		}
		int flag = 0, tag = 0;
		for(i = 1; i <= n; i++)           //判是否連通
			if(par[i] == i)
				flag++;
		if(flag > 1)
			cout << 0 << endl;
		else
		{
			for(i = 1; i <= n; i++)  //判頂點的度是否為偶數
			{
				if(degree[i] % 2)
					tag++;
			}
			if(tag > 0)
				cout << 0 << endl;
			else
				cout << 1 << endl;
		}
	}
	return 0;
}


相關推薦

ACM1878——

簡單的歐拉回路,如題。 歐拉回路的判斷: 1.在有向圖中:首先必要的條件是圖連通,所以頂點的入度都等於出度。 2.在無向圖中:首要條件還是圖連通,其次就是所以頂點都是偶數度(該頂點的度為偶數) 這一題是無向圖,所以根據判斷方法來寫,很簡單,判定就不證明了。 我是用並

Problem1878 並查集 +

問題地址 歐拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11814    Accepted Su

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]

】[1878]

判斷是否存在歐拉回路 1.每個點必須有偶數點連線 2.只能有一個根 所以用並查集可以輕鬆完成 #include<stdio.h> int par[1020]; int r[1

1878】

歐拉回路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descr

ACM1116——Play on Words~~尤路徑與

這一題,相比之前做的題目,增加了尤拉路徑的求解。而且這一題是有向圖。題目大概的意思就是成語接龍,能接起來就算可以開啟門,因此要考慮兩種,一種是迴路,另外一種是一條路徑。 第一次WR就是因為沒有考慮迴路這一個因素。 有向圖中,歐拉回路與尤拉路徑的求解方法: 1.歐拉回路: 首

put ++ .cn -1 bool ret 技術分享 代碼 can 思路 根據歐拉圖的概念來。 註意 點數為1; 有孤立點; 代碼實現 T掉的dfs... 1 #include<cstdio> 2 const int max

UVA 10196 Morning Walk(

ble move eve man first pre intersect sum ons Problem H Morning Walk Time Limit 3 Seconds Kamalis a Motashotaguy. He has

[] poj 1300 Door Man

linker center || 是否 connect sep cto -m vector 題目鏈接: http://poj.org/problem?id=1300 Door Man Time Limit: 1000

hdu1878(DFS+)

out sin 整數 white 偶數 ret pad bottom -m 歐拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

[模板][持續更新]路徑淺析

bits solution 算法 -1 要求 logs 鏈式前向星 namespace src Luogu P2731 騎馬修柵欄 Riding the Fences 題目背景 Farmer John每年有很多柵欄要修理。他總是騎著馬穿過每一個柵欄並修復它破損的地方。 題目

51nod 1967 路徑定向(不錯的

cnblogs 偶數 ret mes stack ostream lin .html pre http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 題意: 思路: 出度=入度,這

The Necklace UVA - 10054 (無向圖的

n) 兩個 logs nec get dfs lap none view The Necklace UVA - 10054 題意:每個珠子有兩個顏色,給n個珠子,問能不能連成一個項鏈,使得項鏈相鄰的珠子顏色相同。 把顏色看做點,珠子內部連一條邊,無向圖求歐拉回路。 這

算法復習——混合圖(bzoj2095二分+網絡流)

n) truct lin 歐拉圖 所有 mage borde algo stream 題目: Description YYD為了減肥,他來到了瘦海,這是一個巨大的海,海中有n個小島,小島之間有m座橋連接,兩個小島之間不會有兩座橋,並且從一個小島可以到另外任意一個小島。現在

混合圖

所有 ace .cn geo urn 我們 方向 online n) http://acm.pku.edu.cn/JudgeOnline/problem?id=1273 給一組邊 有的是有向邊有的是無向邊 問是否存在歐拉回路 我們知道如果每個點入度等於出度 就存在歐拉回路

hdu 1956 (網絡流解決

www 起點到終點 更改 什麽 tps 網絡流 個性 http 混合圖 題目連接:https://vjudge.net/problem/HDU-1956 題意:給定一些點和一些邊,有些邊是有向的,,有些邊是無向的,求是否存在歐拉回路。 題解:想不到的網絡流。 混合圖:即

51nod1967 路徑定向(+結論題)

void ++i col () view const stdio.h turn char   看到入度等於出度想到歐拉回路。   我們把邊都變成無向邊,有一個結論是偶數度的點都可以變成出入度相等的點,而奇數點的不行,感性理解分類討論一下就知道是對的。   還有一個更好理

poj1780

href tail poj scanf net str ons for lan 轉載 #include<cstdio> #include<cstring> const int N=1e6+88; bool vis[N]; char an

poj1386有向圖判斷是否存在或者

第一個 include 構圖 cannot tdi ear 首字母 字符 else 有向圖的圖聯通是指基圖聯通,也就是把有向圖的邊改成無向圖然後看是否連通。判斷聯通可用dfs或者並查集。 題意就是給你n個由小寫字母構成的字符串,問你能不能將這n個字符

新知識添加·+路徑

應該 路徑 求解 兩種方法 遍歷 fleury 歐拉路 必要條件 bsp §概念 歐拉通路: 通過圖中每條邊且只通過一次,並且經過每一頂點的通路; 歐拉回路: 通過圖中每條邊且只通過一次,並且經過每一頂點的回路; 歐拉環:圖中經過每條邊一次且僅一次的環; 歐拉路徑:圖中經過