HDU-1878 欧拉回路 欧拉回路
题目链接:https://cn.vjudge.net/problem/HDU-1878
题意
中文题,而且就是单纯的欧拉回路
思路
- 判断连通图
用并查集会很好,bfs亦可
一时脑抽用bfs过了这个题,数据还是太弱 - 出度==入度
代码
并查集查连通
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=1000;
struct Node{
int parent, rank;
Node(int parent=0, int rank=0):
parent(parent), rank(rank) {}
}node[maxn+5];
int n;
int find(int x){
return (node[x].parent==x)?x:(node[x].parent=find(node[x].parent));
}
void join(int a, int b){
a=find(a); b=find(b);
if (a==b) return;
if (node[a].rank==node[b].rank) node[a].rank++;
if (node[a].rank>node[b].rank) node[b].parent=a;
else node[a].parent=b;
}
bool connect(void){
for (int i=2; i<=n; i++)
if (find(1)!=find(i)) return false;
return true;
}
int main(void){
while (scanf("%d", &n)==1 && n){
int m, cnt=0, vis[maxn+5]={0};
bool set[maxn+5]={false};
for (int i=1; i<=n; i++) node[i]=Node(i, 0);
scanf("%d", &m);
for (int i=0, a, b; i<m; i++){
scanf("%d%d", &a, &b);
join(a, b);
vis[a]++; vis[b]++;
}
int flag=false;
for (int i=1; i<=n; i++)
if (vis[i]%2) {flag=true; break;}
if (flag==false && !connect()) flag=true;
printf("%d\n", (flag)?0:1);
}
return 0;
}
BFS查连通
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=1000;
struct Edge{
int from, to;
bool vis;
Edge(int from=0, int to=0, int vis=false):
from(from), to(to), vis(vis) {}
};
vector<Edge> edge;
vector<int> G[maxn+5];
int n;
inline void addEdge(int from, int to){
edge.push_back(Edge(from, to, false));
G[from].push_back(edge.size()-1);
G[to].push_back(edge.size()-1);
}
bool connective(void){
int cnt=1; bool vis[maxn+5]={false};
queue<int> que;
que.push(1); vis[1]=true;
while (que.size()){
int from=que.front(); que.pop();
if (cnt==n) return true;
for (int i=0; i<G[from].size(); i++){
Edge &e=edge[G[from][i]];
int to=(e.to==from)?e.from:e.to;
if (e.vis) continue;
vis[to]=true; e.vis=true; cnt++;
que.push(to);
}
}return false;
}
int main(void){
while (scanf("%d", &n)==1 && n){
int m, vis[maxn+5]={0};
memset(G, 0, sizeof(G));
scanf("%d", &m);
for (int i=0, a, b; i<m; i++){
scanf("%d%d", &a, &b);
addEdge(a, b);// G[a][b]++; G[b][a]++;
vis[a]++; vis[b]++;
}
int flag=false;
for (int i=1; i<=n; i++)
if (vis[i]%2) {flag=true; break;}
if (flag==false && connective()==0) flag=true;
printf("%d\n", (flag)?0:1);
}
return 0;
}
并查集
| Time | Memory | Length | Lang | Submitted |
|---|---|---|---|---|
| 93ms | 1524kB | 1198 | G++ | 2018-03-14 17:22:31 |
BFS
| Time | Memory | Length | Lang | Submitted |
|---|---|---|---|---|
| 124ms | 7016kB | 1445 | G++ | 2018-03-14 17:03:18 |
HDU-1878 欧拉回路 欧拉回路的更多相关文章
- HDU 1878 欧拉回路(判断欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 题目大意:欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一 ...
- HDU 1878 欧拉回路
并查集水题. 一个图存在欧拉回路的判断条件: 无向图存在欧拉回路的充要条件 一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图. 有向图存在欧拉回路的充要条件 一个有向图存在欧拉回 ...
- HDU 1878 欧拉回路 图论
解题报告:题目大意,给出一个无向图,判断图中是否存在欧拉回路. 判断一个无向图中是否有欧拉回路有一个充要条件,就是这个图中不存在奇度定点,然后还要判断的就是连通分支数是否为1,即这个图是不是连通的,这 ...
- hdu 1878 无向图的欧拉回路
原题链接 hdu1878 大致题意: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个无向图,问是否存在欧拉回路? 思路: 无向图存在欧拉回路的条件:1.图是连 ...
- HDU 1878 欧拉回路(无向图的欧拉回路)
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- HDU - 1878 欧拉回路 (连通图+度的判断)
欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是节点数 ...
- HDU 1878(1Y) (判断欧拉回路是否存在 奇点个数为0 + 一个联通分量 *【模板】)
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 1878 欧拉回路(联通<并查集> + 偶数点)
欧拉回路Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- The Best Path HDU - 5883(欧拉回路 && 欧拉路径)
The Best Path Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- hdu 1878
http://acm.hdu.edu.cn/showproblem.php?pid=1878 题意:就是判断这个图是不是一个欧拉回路的一个题, 思路:我觉得这个题可以用并查集判环加上判断每个点的度就行 ...
随机推荐
- 正睿NOIP赠送附加赛1
T1:math 题目链接: http://zhengruioi.com/contest/156/problem/471 题解: 先讲讲我的乱搞做法.对于前面70%,我跑了背包.因为背包有后效性...我 ...
- Struts1、Struts2、Hibernate、Spring框架工作原理介绍
Struts1工作原理 Struts1工作原理图 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控 ...
- eclipse用tomcat发布网站的目录
用eclipse添加的tomcat发布网站时,在tomcat安装目录中的webapps时找不到发布的网站.这是由于eclipse的默认配置,把项目发布到别的文件夹中了.如果想发布到webapps里面, ...
- li自定义图标
/*自定义list的图标*/ li{ list-style-image: url(../img/21.JPG); }
- .NET 拼音汉字转化(全面)
引言 这是一个.NET 用C#语言编写的 拼音转汉字类,考虑到有很多拼音转汉字,但是试用过发现大部分有很多生僻字都没有办法显示.在此分享一个支持绝大多数的较为全面的拼音汉字转化帮助类.不多说,代码附 ...
- Mybatis传递多个参数的解决办法(三种)
第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="s ...
- luogu P1495 曹冲养猪(中国剩余定理)
题意 题解 翻到了一个金句 就跟这句话说得一样,就是个裸题. 所以看模板呗. #include<iostream> #include<cstring> #include< ...
- linux 安装常用库
在CentOS安装软件的时候,可能缺少一部分支持库,而报错.这里首先安装系统常用的支持库.那么在安装的时候就会减少很多的错误的出现. [root@bogon 桌面]# yum install -y ...
- Opencv 三对角线矩阵(Tridiagonal Matrix)解法之(Thomas Algorithm)
1. 简介 三对角线矩阵(Tridiagonal Matrix),结构如公式(1)所示: aixi−1+bixi+cixx+1=di(1) 其中a1=0,cn=0.写成矩阵形式如(2): ⎡⎣⎢⎢⎢⎢ ...
- RIP协议的配置
拓扑图: 要求: 理解RIP协议的工作原理,并通过 RIP 路由协议实现不同网络互通. 配置步骤: 1.配置好 PC 机的 IP 地址等參数. PC 0>ipconfig IP Address. ...