[ ACM ] Hdu 1878 欧拉回路

欧拉通路:图中所有的节点的度都是偶数。

所以只需要记一下每个点出现的次数即可。

有一种像下面的特例(n==6):
  1       4
 / \     / \
2---3   5---6
虽然每个节点的度都是2,但分成了两部分。

所以,还要用并查集判断一下。

 1 #include <cstdio>
 2 #include <cstring>
 3
 4 const int MAXN=1000+5;
 5 const int INF=100000000;
 6
 7 int node[MAXN];
 8 int parent[MAXN];
 9
10 int main(){
11     int n,m;
12     while(scanf("%d",&n) && n!=0){
13         scanf("%d",&m);
14         for(int i=0;i<=n;i++){
15             node[i]=0;
16             parent[i]=i;
17         }
18         int a,b;
19         while(m--){
20             scanf("%d %d",&a,&b);
21             node[a]++;
22             node[b]++;
23             parent[b]=parent[a];
24         }
25         int ans=0,ok=true;
26         for(int i=1;i<=n;i++){
27             if(node[i]%2!=0)ans++;
28         }
29         if(ans==0){
30             int t=parent[1];
31             for(int i=1;i<=n;i++){
32                 if(parent[i]!=t)
33                     ok=false;
34             }
35         }
36         else
37             ok=false;
38
39         if(ok)printf("1\n");
40         else printf("0\n");
41     }
42 }
时间: 2024-08-24 07:46:21

[ ACM ] Hdu 1878 欧拉回路的相关文章

hdu 1878 欧拉回路 (欧拉回路)

//1.联通图 2.顶点度数都为偶数 ,则存在欧拉回路. # include <stdio.h> # include <algorithm> # include <string.h> using namespace std; int father[1010]; int vis[1010][1010],du[1010]; int find(int x) { if(father[x]==x) return x; return father[x]=find(father[x]

HDU 1878 欧拉回路 (并查集+欧拉回路)

题目地址:HDU 1878 这个题要注意欧拉回路与欧拉通路的区别.在都保证连通性的前提下,欧拉回路要求每个点的度数都是偶数,而欧拉通路允许两个点的度数是奇数.所以这题用并查集判断连通性后判断下度数就可以了. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib

hdu 1878 欧拉回路

欧拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M:随后的M行对应M条边,每行给出一对

HDU 1878.欧拉回路【欧拉路及欧拉回路初接触】【8月2】

欧拉回路 Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是节点数N ( 1 < N < 1000 )和边数M:随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号(节点从1到N编号).当N为0时输入结 束. Output 每个测试用例的输出占一行,若欧拉回路存在则输出1,否则输出0.

hdu 1878 欧拉回路 水题。测试数据貌似有点问题

欧拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 10135    Accepted Submission(s): 3708 Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个测试用例

hdu 1878 欧拉回路+并查集

欧拉回路: 通过图中每条边且只通过一次,并且经过每一顶点的回路. 无向图欧拉回路的判定:图连通:图中所有节点度均为偶数 有向图欧拉回路的判定:图连通:所有节点入度等于出度 这道题属于无向图,首先用并查集判断图的联通性,各点的度数用一个数组保存下来. 如果一个点的根结点和其他点的根结点不同,则图不联通,有点度数为奇数也不满足欧拉回路,则输出0,否则输出1. 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath&g

hdoj 1878 欧拉回路(无向图欧拉回路+并查集)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 思路分析:该问题给定一个无向图,要求判断该无向图是否存在欧拉回路:无向图判断存在欧拉回路的两个必要条件:该无向图为连通图且所有的结点的度数为偶数: 代码如下: #include <cstdio> #include <cstring> #include <iostream> using namespace std; const int MAX_N = 1000 + 10

[ACM] hdu 1242 Rescue (BFS+优先队列)

Rescue Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is described as a N * M (N, M <= 200) matrix. There are WALLs, ROADs, and GUARDs in the prison. Angel's friends want to save Angel. Their task is:

[2016-01-21][HDU][1878]

/************************************************************* 时间:2016-01-20  15:00:34  星期三 题目编号:G HDU 1878 题目大意:给定一个图,判断是否是欧拉图 方法:         1.度数是偶数        2.连通量为1 判断连通量 可以 用 并查集 也可以dfs 解题过程遇到问题: *******************************************************