题目传送门

题解

几乎是Fleury模板题。

一开始我们把图看作无向图,然后对于度为奇数的点增边,使得整个图的所有点都是偶数的。

然后跑一遍欧拉回路 Fleury ,所有的边就定向好了~

代码

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=1e5+,M=3e5*+;
int fst[N],n,m,cnt=,die[M],ans[M],totdo;
struct Edge{
int x,y,nxt,f,bh;
void set(int a,int b,int BH,int F){
x=a,y=b,bh=BH,f=F;
}
}e[M];
void read(int &x){
char ch=getchar();
x=;
while (!(''<=ch&&ch<=''))
ch=getchar();
while (''<=ch&&ch<=''){
x=x*+ch-;
ch=getchar();
}
}
void Make_Disedge(){
totdo=;
int prev=,in[N],m_=m;
memset(in,,sizeof in);
for (int i=;i<=cnt;i++)
in[e[i].y]++;
for (int i=;i<=n;i++){
if (in[i]%==){
totdo++;
continue;
}
if (prev==)
prev=i;
else {
e[++cnt].set(prev,i,++m_,);
e[cnt].nxt=fst[prev],fst[prev]=cnt;
e[++cnt].set(i,prev,m_,);
e[cnt].nxt=fst[i],fst[i]=cnt;
prev=;
}
}
}
void Flenry(int rt){
for (int i=fst[rt];i;i=e[i].nxt){
if (die[e[i].bh]){
fst[rt]=e[i].nxt;
continue;
}
die[e[i].bh]=;
ans[e[i].bh]=e[i].f;
fst[rt]=e[i].nxt;
Flenry(e[i].y);
break;
}
}
int main(){
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++){
int a,b;
read(a),read(b);
e[++cnt].set(a,b,i,);
e[cnt].nxt=fst[a],fst[a]=cnt;
e[++cnt].set(b,a,i,);
e[cnt].nxt=fst[b],fst[b]=cnt;
}
Make_Disedge();
for (int i=;i<=n;i++) Flenry(i);
printf("%d\n",totdo);
for (int i=;i<=m;i++)
putchar(ans[i]+'');
return ;
}

51nod1967 路径定向 Fleury的更多相关文章

  1. 51nod1967 路径定向(欧拉回路+结论题)

    看到入度等于出度想到欧拉回路. 我们把边都变成无向边,有一个结论是偶数度的点都可以变成出入度相等的点,而奇数点的不行,感性理解分类讨论一下就知道是对的. 还有一个更好理解的结论是变成无向边后奇数点的个 ...

  2. 【题解】51nod1967 路径定向

    第一次写欧拉回路,实际上只要dfs下去就可以了,反正每条边都是要遍历一遍的…… 关键有两个性质:1.一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图.2.一个有向图存在欧拉回路 ...

  3. 51nod 1967路径定向(dfs、欧拉回路)

    1967 路径定向 基准时间限制:1.2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 给出一个有向图,要求给每条边重定向,使得定向后出度等于入度的点最多,输出答案和任意一种方案 ...

  4. 51Nod 1967 路径定向 —— 欧拉回路

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 显然是欧拉回路问题,度数为奇数的点之间连边,跑欧拉回路就可以 ...

  5. 51nod 1967 路径定向(不错的欧拉回路)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 题意: 思路: 出度=入度,这很容易想到欧拉回路,事实上,这道题目 ...

  6. 51nod 1967路径定向(欧拉回路)

    题目大意:给出一个图,安排边的方向,使得入度等于出度的点数最多,并给出方案. 首先假设是个无向图,不妨认定偶点必定可以满足条件 我们还会发现,奇点的个数必定是偶数个 那么如果把奇点两两用辅助边连起来, ...

  7. 51nod 1967 路径定向——欧拉回路

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 一共只会有偶数个奇数度的点.因为每多一条边,总度数加2. 把 ...

  8. Python 小问题解决

    安装第三方源包时候,我使用的是pip,但是遇到很多问题.使用的Python 3.5,安装了VS2012 因为参考的是廖雪峰的教程,首先是PIL的安装上一直出问题. 直接使用 pip install P ...

  9. node.js 基础学习笔记3 -express

    1.工作原理 当通过app.js建立的服务器时,会看到一个简单的页面.返回页面时,浏览器会向服务器发送请求.app会解析请求的路径,调用相应的逻辑,调用对应的视图模板,传递对象数值,最终生成HTML页 ...

随机推荐

  1. use Swig to create C/C++ extension for Python

    SWIG is a software development tool that simplifies the task of interfacing different languages to C ...

  2. ASP.NET MVC5高级编程 之 路由

    每个ASP.NET MVC应用程序都需要路由来定义自己处理请求的方式.路由是MVC应用程序的入口点.路由的核心工作是将一个请求映射到一个操作 路由主要有两种用途: 匹配传入的请求(该请求不匹配服务器文 ...

  3. 【原创】大叔经验分享(32)docker挂载文件修改生效

    docker经常需要挂载文件到容器中,比如启动nginx # docker run -d --name test_nginx -v /tmp/nginx.conf:/etc/nginx/nginx.c ...

  4. 手机CPU架构体系分类及各大厂商

    手机cpu相关知识,这对于开发Android应用程序适应各个机型有一定的辅助作用 . 手机cpu架构体系分类 指令集可分为复杂指令集(CISC)和精简指令集(RISC)两部分,代表架构分别是x86.A ...

  5. a href=#与 a href=javascript:void(0) 的区别(转)

    a href="#"> 点击链接后,页面会向上滚到页首,# 默认锚点为 #TOP <a href="javascript:void(0)" onCl ...

  6. C#一元二次方程

  7. Confluence 6 升级自定义的站点和空间布局

    随着 Confluence 的演变.默认的站点和空间布局也会随着 Confluence 升级而让使用的所有页面进行改变.随着一些新功能的加入和一些老功能的修改,默认的布局也需要进行修改来支持这些改变. ...

  8. python冒泡排序法

  9. linux下安装nginx及初步认识

    linux下安装配置nginx nginx:是一个高性能的反向代理服务器正向代理代理的是客户端,反向代理代理的是服务端. 这里以nginx-1.12.2版本为例子 1.首先去官网下载nginx-1.1 ...

  10. LeetCode(83): 删除排序链表中的重复元素

    Easy! 题目描述: 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1-&g ...