题目:

题解:

欧拉回路相关定理(相关定义和证明请参见其他资料):

1.欧拉回路

(1)有向图:所有点的出度都等于入度为该图为欧拉图(存在欧拉回路)的充要条件。

(2)无向图:所有点的度都为偶数为该图为欧拉图(存在欧拉回路)的充要条件。

2.欧拉通路

(1)有向图:除两点(其中一点出度+1==入度,另一点入度+1==出度)另外点出度都等于入度为该图为半欧拉图(存在欧拉通路)的充要条件。

(2)无向图:除两点(两点度都为奇数)另外点的度都为偶数为该图为半欧拉图(存在欧拉通路)的充要条件。

以上定理用于判断是否为存在欧拉回路或者通路

接下来是两个推论:

嗯就是这样··再回到这道题上,一道很裸地模版题···然而被uoj大佬的数据教做人··

注意判定重边不然就会超时·····用类似于网络流的cur来优化(具体见代码)

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N=1e5+;
const int M=5e5+;
int first[N],go[M*],next[M*],tot=;
int n,m,T,ru[N],chu[N],stack[M*],cnt;
bool visit[M];
inline void comb(int a,int b)
{
next[++tot]=first[a],first[a]=tot,go[tot]=b;
}
inline void dfs1(int u)
{
for(int &e=first[u];e;e=next[e])
{
if(!visit[e])
{
visit[e]=true;
if(e%==)
visit[e+]=true;
else
visit[e-]=true;
int t=e;
dfs1(go[e]);
stack[++cnt]=t;
}
}
}
inline void dfs2(int u)
{
for(int &e=first[u];e;e=next[e])
{
if(!visit[e])
{
visit[e]=true;
int t=e;
dfs2(go[e]);
stack[++cnt]=t;
}
}
}
int main()
{
//freopen("a.in","r",stdin);
scanf("%d",&T);
int a,b;
scanf("%d%d",&n,&m);
if(T==) //无向图情况
{
for(int i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
comb(a,b);
comb(b,a);
ru[b]++;
chu[a]++;
}
for(int i=;i<=n;i++)
if((ru[i]+chu[i])%==)
{
cout<<"NO"<<endl;
return ;
}
for(int i=;i<=n;i++)
{
if(first[i])
{
dfs1(i);
break;
}
}
if(cnt!=m)
{
cout<<"NO"<<endl;
return ;
}
cout<<"YES"<<endl;
for(int i=cnt;i>=;i--)
{
if(stack[i]%==)
cout<<(stack[i]+)/<<" ";
else
cout<<stack[i]/*(-)<<" ";
}
return ;
}
else
{
for(int i=;i<=m;i++)
{
scanf("%d%d",&a,&b);
comb(a,b);
ru[b]++;
chu[a]++;
}
for(int i=;i<=n;i++)
if(ru[i]!=chu[i])
{
cout<<"NO"<<endl;
return ;
}
for(int i=;i<=n;i++)
{
if(first[i])
{
dfs2(i);
break;
}
}
if(cnt!=m)
{
cout<<"NO"<<endl;
return ;
}
cout<<"YES"<<endl;
for(int i=cnt;i>=;i--)
cout<<stack[i]<<" ";
return ;
}
}

算法复习——欧拉回路(uoj117)的更多相关文章

  1. 算法复习——欧拉回路混合图(bzoj2095二分+网络流)

    题目: Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到另外任意一个小岛.现在YYD想骑单车 ...

  2. C#冒泡算法复习

    C#冒泡算法复习 冒泡算法的意思:每一趟找到一个最小或最大的数放到最后面,比较总数的n-1次(因为比较是2个双双比较的) 第一层循环表示进行比较的次数,总共要比较(数的)-1次 (因为比较是2个双双比 ...

  3. C语言排序算法复习

    排序算法有很多种,这里在复习和分析的基础上,做一个自己的总结: 首先要知道有哪些排序算法,google一下,有云C语言7大经典排序算法(也有8大).主要包括冒泡排序,快速排序,选择排序,插入排序,希尔 ...

  4. KMP算法复习【+继续学习】

    离NOIP还剩12天,本蒟蒻开始准备复习了. 先来个KMP[似乎我并没有写过KMP的blog] KMP KMP算法是解决字符串匹配问题的一个算法,主要是单对单的字符串匹配加速,时间复杂度O(m + n ...

  5. 算法复习周------“动态规划之‘最长公共子序列’”&&《计蒜课》---最长公共子串题解

    问题描述: 这个问题其实很容易理解.就是给你两个序列X={x1,x2,x3......xm} Y={y1,y2,y3......ym},要求找出X和Y的一个最长的公共子序列. 例:Xi={A, B, ...

  6. K-Means聚类和EM算法复习总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 k-means算法是一种得到最广泛使用的聚类算法. 它是将各个聚类子集内 ...

  7. 通过“回文字算法”复习C++语言。

    一.什么是回文字 给定一个字符串,从前往后读和从后往前读,字符串序列不变.例如,河北省农村信用社的客服电话是“96369”,无论从后往前读,还是从前后往后读,各个字符出现的位置不变. 二.功能实现 ( ...

  8. 欧拉回路 uoj117

    写了一道欧拉回路的模板题.先判断是否是欧拉回路,有向图和无向图有一点点不同,然后就是特判独立点的存在. 之后是输出路径,和dls学的dfs,利用last数组的更新可以做到线性的复杂度,否则一不小心就会 ...

  9. 【转】常用算法复习及实现(C++版)

    一.霍夫曼树实现 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree).哈夫曼树是带权路径长度最短的树,权值较大 ...

随机推荐

  1. 结合BeautifulSoup和hackhttp的爬虫实例

    网页页数的改变 headers头不添加

  2. 180706-BigDecimal除法的精度问题

    BigDecimal除法的精度问题 在使用BigDecimal的除法时,遇到一个鬼畜的问题,本以为的精度计算,结果使用返回0,当然最终发现还是自己的使用姿势不对导致的,因此记录一下,避免后面重蹈覆辙 ...

  3. Java 递归 反射 正则表达式

    一 递归 1. 就是函数自身调用自身 (就是在栈内存中不断的加载同一个函数) 2. 什么时候用递归呢? 当一个功能被重复使用 而每一次使用该功能时的参数不确定 都由上次的功能元素结果来确定 简单说: ...

  4. C++11 type_traits 之is_same源码分析

    请看源码: template<typename _Tp, _Tp __v> struct integral_constant { static const _Tp value = __v; ...

  5. 从零开始的Python学习Episode 4——列表

    一.列表 列表与数组相似,定义一个列表 a=[1,2,3,4,5] 1.基本操作 a=[1,2,3,4] #切片 范围取值时,包括第一项但不包括最后一项,顾头不顾尾 print(a[0:]) #从头到 ...

  6. leetcode7_C++整数反转

      给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 输出:  示例 2: 输入: - 输出: - 示例 3: 输入: 输出: 注意: 假设我们的环境只能存 ...

  7. Hadoop第二课:Hadoop集群环境配置

    一.Yum配置 1.检查Yum是否安装 rpm -qa|grep yum 2.修改yum源,我使用的是163的镜像源(http://mirrors.163.com/),根据自己的系统选择源, #进入目 ...

  8. 将SqlDataReader 数据集转化为datatbale ,在将datatable 转化为iList

    public IList GetModelList(string tablename, string where) { IList list = null; DataTable dataTable = ...

  9. HDU 4115 Eliminate the Conflict(2-SAT)(2011 Asia ChengDu Regional Contest)

    Problem Description Conflicts are everywhere in the world, from the young to the elderly, from famil ...

  10. how to install pygraphviz on windows 10 with python 3.6

    Here's what worked for me: Win 7 AMD64 Install MSFT C++ compiler. Install Anaconda for Win AMD64, Py ...