欧拉回路基础 HDU1878 欧拉回路||并差集
欧拉回路
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10544 Accepted Submission(s): 3845
束。
1 2
1 3
2 3
3 2
1 2
2 3
0
0
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int map[maxn][maxn];
bool vis[maxn];
int indegree[maxn],father[maxn];
int n,m;
void init(){
for(int i=;i<=n;i++)
father[i]=i;
}
int find(int u){
if(father[u]!=u)
father[u]=find(father[u]);
return father[u];
}
void Union(int x,int y){
int t1=find(x);
int t2=find(y);
if(t1!=t2)
father[t1]=t2;
}
int main(){ while(scanf("%d",&n)&&n){
init();
memset(map,,sizeof(map));
memset(indegree,,sizeof(indegree));
memset(vis,false,sizeof(vis));
scanf("%d",&m);
for(int i=;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
map[u][v]=map[v][u]=;
Union(u,v);
indegree[u]++;
indegree[v]++;
}
bool flag=false;
int sum=;
for(int i=;i<=n;i++){
if(father[i]==i){
sum++;
}
if(indegree[i]%==){
flag=true;
break;
}
} if(flag==true||sum!=)
printf("0\n");
else
printf("1\n"); }
return ;
}
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int map[maxn][maxn];
bool vis[maxn];
int indegree[maxn];
int n,m;
void dfs(int u){
vis[u]=true;
for(int i=;i<=n;i++)
if(!vis[i]&&map[u][i])
dfs(i);
return ;
}
int main(){
while(scanf("%d",&n)&&n){
scanf("%d",&m);
memset(map,,sizeof(map));
memset(vis,false,sizeof(vis));
memset(indegree,,sizeof(indegree));
for(int i=;i<m;i++){
int u,v;
scanf("%d%d",&u,&v);
indegree[u]++;
indegree[v]++;
map[u][v]=map[v][u]=;
} dfs();
int i;
for( i=;i<=n;i++){
if(!vis[i]||indegree[i]%==)
break;
}
if(i>n)
printf("1\n");
else
printf("0\n");
}
return ;
}
//本题主要考察欧拉回路的两个充要条件:1.联通图 2.顶点度数都为偶数 (两个条件缺一不可) #include<stdio.h>
#include<string.h> int graph[][]; //采用邻接矩阵存储图
int visit[]; //在遍历时标记该点是否被访问过
int degree[]; //存储节点的度 void DFS(int v, int n) { //深度优先遍历,递归
visit[v] = ;
for(int i=; i<=n; i++)
if(graph[v][i] && visit[i]==)
DFS(i,n);
} int main() {
//freopen("in.txt","r",stdin);
int n, m;
while(scanf("%d %d",&n,&m)!=EOF && n) {
memset(graph,,sizeof(graph)); //清零
memset(visit,,sizeof(visit));
memset(degree,,sizeof(degree));
int a, b, i;
int flag = ; //标记是否存在欧拉回路
for(i=; i<m; i++) {
scanf("%d %d",&a,&b);
graph[a][b] = graph[b][a] = ; //"1"表示两点属于邻接关系
degree[a]++; degree[b]++;
}
DFS(,n);
for(i=; i<=n; i++) {
if(visit[i] == ) {
flag = ; //若有点未曾被访问,即一次深度遍历有未访问的点,则不存在欧拉回路
break;
}
if(degree[i] % != ) {
flag = ; //若有点的度不是偶数,则不存在欧拉回路
break;
}
}
if(flag)
printf("1\n");
else
printf("0\n");
} return ;
}
欧拉回路基础 HDU1878 欧拉回路||并差集的更多相关文章
- HDU1878 欧拉回路 - from lanshui_Yang
Problem Description 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个 ...
- HDU-1878 欧拉回路 欧拉回路
题目链接:https://cn.vjudge.net/problem/HDU-1878 题意 中文题,而且就是单纯的欧拉回路 思路 判断连通图 用并查集会很好,bfs亦可 一时脑抽用bfs过了这个题, ...
- hdu1878 欧拉回路
//Accepted 1240 KB 250 ms //水题 欧拉回路 //连通+节点度均为偶数 #include <cstdio> #include <cstring> #i ...
- uva 10054 The Necklace 拼项链 欧拉回路基础应用
昨天做了道水题,今天这题是比较水的应用. 给出n个项链的珠子,珠子的两端有两种颜色,项链上相邻的珠子要颜色匹配,判断能不能拼凑成一天项链. 是挺水的,但是一开始我把整个项链看成一个点,然后用dfs去找 ...
- Uva 10596 - Morning Walk 欧拉回路基础水题 并查集实现
题目给出图,要求判断不能一遍走完所有边,也就是无向图,题目分类是分欧拉回路,但其实只要判断度数就行了. 一开始以为只要判断度数就可以了,交了一发WA了.听别人说要先判断是否是联通图,于是用并查集并一起 ...
- HDU1878 欧拉回路---(并查集+图论性质)
http://acm.hdu.edu.cn/showproblem.php?pid=1878 欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- hdu1878欧拉回路(DFS+欧拉回路)
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- POJ 1300 最基础的欧拉回路问题
题目大意: 从0~n-1编号的房间,从一个起点开始最后到达0号房间,每经过一扇门就关上,问最后能否通过所有门且到达0号房间 我觉得这道题的输入输出格式是我第一次遇到,所以在sscanf上也看了很久 每 ...
- HDU-1878 欧拉回路(并查集,欧拉回路性质)
欧拉回路 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
随机推荐
- POJ 3181 Dollar Dayz(递推,两个long long)
题意:John有N美元,有价格为1~K的工具,可以买的个数不限,问1~K组合出N的方案数. f[i = 第i中工具][j = 花费为j] = 方案数. f[i][j] = sigma{ f[i-1][ ...
- 分析ELF的加载过程
http://blog.chinaunix.net/uid-72446-id-2060538.html 对于可执行文件来说,段的加载位置是固定的,程序段表中如实反映了段的加载地址.对于共享库来?段的加 ...
- vim 编辑器的使用方法
vim 命令模式 默认打开文件为命令模式 命令行模式 shift+: 命令行模式 编辑模式 i 编辑模式 Esc 切换命令模式 命令模式 -----字符操作 i 当 ...
- 3219: 求最高同学位置—C语言版
3219: 求最高同学位置—C语言版 时间限制: 1 Sec 内存限制: 128 MB提交: 207 解决: 115[提交][状态][讨论版][命题人:smallgyy] 题目描述 设一维数组存放 ...
- 前端安全之XSS和csrf攻击
1.Csrf攻击概念: csrf攻击(Cross-site request forgery):跨站请求伪造; 2.Csrf攻击原理: 用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cook ...
- 使用git stash命令保存和恢复进度
使用git stash命令保存和恢复进度 git stash 保存当前工作进度,会把暂存区和工作区的改动保存起来.执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有 ...
- shell与python判断文件是否存在
日常运维中,我们会存在每日备份的现象,针对这一种情况可能会要求监控文件是否存在.比较笨拙的方法就是登录上服务器到某个路径下查看文件是否存在,除此之外,我们可以利用shell或者python来编写监控文 ...
- 自动化运维工具——ansible剧本playbook(三)
一.Playbook--Ansible剧本 playbook是由一个或多个 "play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的ta ...
- js禁止微信浏览器下拉显示黑底查看网址
// 首先禁止body document.body.ontouchmove = function (e) { e.preventDefault(); }; // 然后取得触摸点的坐标 var star ...
- 初学js之qq聊天展开实例
实现这样的效果. 直接看代码,html部分: <body> <div class="box"> <div class="lists" ...