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 题意:就是判断这个图是不是一个欧拉回路的一个题, 思路:我觉得这个题可以用并查集判环加上判断每个点的度就行 ...
随机推荐
- [hihocoder #1384] Genius ACM 解题报告(倍增)
题目链接:http://hihocoder.com/problemset/problem/1384 题目大意: 给定一个整数 M,对于任意一个整数集合 S,定义“校验值”如下: 从集合 S 中取出 M ...
- MYSQL 5.7 MHA(GTID+ROW)部署及failover,online_change实战演练
文章结构如下: 1.MHA简介 Masterhigh availability manager and toolsfor mysql,是日本的一位mysql专家采用perl语言编写的一个脚本管理工具, ...
- APICloud关闭Key Building Resolve
顶部菜单 --> 扩展 --> keybinding resolver --> toggle
- React-Router-API中文介绍
React-Router API 以下内容翻译自react-router/doc/API.md,方便使用时查看,之前的学习都是能够工作即可,但一些内在发生的行为并不知晓,借此理解一番: ##Compo ...
- BZOJ 4870: [Shoi2017]组合数问题 矩阵乘法_递推
Code: #include <cstdio> #include <cstring> #include <algorithm> #define setIO(s) f ...
- PHP十六个魔术方法
PHP中把以两个下划线__开头的方法称为魔术方法(Magic methods),这些方法在PHP中充当了举足轻重的作用. 魔术方法包括: __construct(),类的构造函数 __destruct ...
- 使用windowbuilder的时候更方便——设置默认把控件生成为成员变量而不是局部变量
找了一大圈,最后还是上Google才找到这个方法的.以前改过了,重新设置工作目录之后设置都丢失了,却找不到改的办法,这次长个记性,记在自己博客里. 设置成成员属性的好处是随后使用这些控件的时候方便.
- javascript 继承之拷贝,原型,类式
// 拷贝继承,在子类内调用父类并修正this指向,再通过for in 拷贝父类的方法实现继承,具体实现如下代码 : function Tab(){//父类构造函数 this.name='aaa'; ...
- H3C S5130交换机堆叠操作
配置过程中注意事项: 1.最好提前定义好IRF的主从设备,可通过IRF优先级进行定义,越大越优 2.一定要在使能IRF之前就保存配置(因为使能过程中,会出现设备重启的情况,如果设备重启后配置丢失,会导 ...
- python scrapy爬取HBS 汉堡南美航运公司柜号信息
下面分享个scrapy的例子 利用scrapy爬取HBS 船公司柜号信息 1.前期准备 查询提单号下的柜号有哪些,主要是在下面的网站上,输入提单号,然后点击查询 https://www.hamburg ...