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 题意:就是判断这个图是不是一个欧拉回路的一个题, 思路:我觉得这个题可以用并查集判环加上判断每个点的度就行 ...
随机推荐
- C#各个版本中的新增特性详解【转】
序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Fram ...
- 如何实现内核旁路(Kernel bypass)?
转到 :http://blog.jobbole.com/94976/ 在前两篇文章中,我们讨论了<如何生成每秒百万级别的HTTP 请求?> 以及 如何减少往返时间 .我们在 Linux 上 ...
- Java获取环境变量和系统属性
Java获取服务器环境变量和JVM系统变量 当程序中需要使用与操作系统相关的变量(例如:文件分隔符.换行符)时,Java提供了System类的静态方法getenv()和getProperty() ...
- Glide错误java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
解决办法 在使用Glide的那段代码加是否在主线程判断 if(Util.isOnMainThread()) { Glide.with(ClassifyItemDetailActivity.this). ...
- Twilio介绍和使用
1.Twilio是?需要如何才能通过Twilio打国际网络电话 http://uuxn.com/twilio-toll-free-sms介绍了通过网页来收取和发送信息 需求:通过TWILIO拨打国外座 ...
- GDOI2017 再次酱油记
Day 0 13:00 pm 啊...今天中午一点钟从ez出发,感觉吼有趣啊.出发前先大喊一声****,在书包里放一本党史,感觉玄学可以救命[滑稽] 15:00 pm 到达东莞,坐标:石龙名冠金凯悦大 ...
- linux上 mysql 的安装,以及解决不能远程访问数据库系统的问题
1.安装 通过 yum 安装最方便 2.重设密码: 修改 etc/my.cnf 文件 skip-grant-tables 跳出登录后,# /etc/init.d/mysqld restart 重启后 ...
- WPF 内部的5个窗口之 MediaContextNotificationWindow
原文:WPF 内部的5个窗口之 MediaContextNotificationWindow 本文告诉大家在 WPF 内部的5个窗口的 MediaContextNotificationWindow 是 ...
- java 项目 导入成功后jsp页面报错处理方法
本人新导入一个maven项目可是jsp页面一直报错,我先按照网上的经验操作如下步骤: 在pom.xml配置文件中添加上javax.servlet的相关依赖: <dependency> & ...
- Qt之QSpacerItem
简述 QSpacerItem类为布局提供了一个空白区. 简述 比对 使用 效果 源码 效果 源码 比对 通常情况下,不需要直接使用这个类,Qt内建布局管理器在操控空白区时提供以下功能: 类 函数 QH ...