51nod 1967 路径定向(不错的欧拉回路)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967
题意:

思路:
出度=入度,这很容易想到欧拉回路,事实上,这道题目也确实是用欧拉回路来做的,之前一直觉得应该用网络流来做,可惜想不出,后来看官方题解说也是可以的,但是复杂度太高。
对于每条边,先假设它为无向边,奇点的个数肯定是偶数个,对于这些奇点,我们可以两两连条边,使它们变成偶点,这样一来就肯定存在欧拉回路了,跑一遍就可以了。新加的边是不会影响结果的。
这道题目有点卡时间,用printf输出会超时,得用putchar。
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<sstream>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,ll> pll;
const int inf = 0x3f3f3f3f;
const int maxn=1e6+;
const int mod=1e9+; int n, m;
int vis[maxn];
int ans[maxn];
int flag[maxn];
int degree[maxn]; struct node
{
int u,v;
}e[maxn]; vector<int> G[maxn],p; void dfs(int x)
{
vis[x]=;
for(int i=;i<G[x].size();i++)
{
int idx=G[x][i];
if(flag[idx]) continue;
if(e[idx].u==x) {flag[idx]=;dfs(e[idx].v);}
else {flag[idx]=;dfs(e[idx].u);}
}
} int main()
{
//freopen("in.txt","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
e[i].u=u, e[i].v=v;
G[u].push_back(i);
G[v].push_back(i);
degree[u]++;
degree[v]++;
}
for(int i=;i<=n;i++) if(degree[i]&) p.push_back(i);
for(int i=;i<p.size();i+=)
{
e[i/+m].u=p[i], e[i/+m].v=p[i+];
G[p[i]].push_back(i/+m);
G[p[i+]].push_back(i/+m);
}
for(int i=;i<=n;i++)
{
if(!vis[i]) dfs(i);
}
printf("%d\n",n-p.size());
for(int i=;i<m;i++)
{
if(flag[i]==) putchar('');
else putchar('');
}
printf("\n");
return ;
}
51nod 1967 路径定向(不错的欧拉回路)的更多相关文章
- 51nod 1967路径定向(dfs、欧拉回路)
		1967 路径定向 基准时间限制:1.2 秒 空间限制:262144 KB 分值: 80 难度:5级算法题 给出一个有向图,要求给每条边重定向,使得定向后出度等于入度的点最多,输出答案和任意一种方案 ... 
- 51Nod 1967 路径定向 —— 欧拉回路
		题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 显然是欧拉回路问题,度数为奇数的点之间连边,跑欧拉回路就可以 ... 
- 51nod 1967 路径定向——欧拉回路
		题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1967 一共只会有偶数个奇数度的点.因为每多一条边,总度数加2. 把 ... 
- 51nod 1967路径定向(欧拉回路)
		题目大意:给出一个图,安排边的方向,使得入度等于出度的点数最多,并给出方案. 首先假设是个无向图,不妨认定偶点必定可以满足条件 我们还会发现,奇点的个数必定是偶数个 那么如果把奇点两两用辅助边连起来, ... 
- 51nod1967 路径定向(欧拉回路+结论题)
		看到入度等于出度想到欧拉回路. 我们把边都变成无向边,有一个结论是偶数度的点都可以变成出入度相等的点,而奇数点的不行,感性理解分类讨论一下就知道是对的. 还有一个更好理解的结论是变成无向边后奇数点的个 ... 
- 51nod1967 路径定向 Fleury
		题目传送门 题解 几乎是Fleury模板题. 一开始我们把图看作无向图,然后对于度为奇数的点增边,使得整个图的所有点都是偶数的. 然后跑一遍欧拉回路 Fleury ,所有的边就定向好了~ 代码 #in ... 
- 51nod 1443 路径和树(最短路)
		题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1443 1443 路径和树 题目来源: CodeForces ... 
- 转:requirejs:让人迷惑的路径解析(~~不错)
		接触过requirejs的童鞋可能都知道,无论是通过define来定义模块,还是通过require来加载模块,模块依赖声明都是很重要的一步.而其中涉及到的模块路径解析,对于新手来说,有的时候会让人觉得 ... 
- 51nod 1443 路径和树(最短路树)
		题目链接:路径和树 题意:给定无向带权连通图,求从u开始边权和最小的最短路树,输出最小边权和. 题解:构造出最短路树,把存留下来的边权全部加起来.(跑dijkstra的时候松弛加上$ < $变成 ... 
随机推荐
- 请用漂亮欢呼-------Day38
			版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/marSmile_tbo/article/details/31108557 周末,双休,疯了两天.敲了 ... 
- android studio 1
			1.继承activity类的时候,重写父类 @Override //伪代码 ,代表如果不是重写父类的方法,该地方会报错 protected void onCreate( Bundle savedI ... 
- SQL 4
			SQL WHERE 子句 WHERE 子句用于过滤记录. SQL WHERE 子句 WHERE 子句用于提取那些满足指定标准的记录. SQL WHERE 语法 SELECT column_name,c ... 
- abap 基本知识
			sap gui 安装教程:http://www.itpub.net/forum.php?mod=viewthread&tid=2090890 1:abap 基本数据类型: i(整型),f(浮点 ... 
- 完成向后台添加用户的ssm项目,完整版
			1:ssm框架整合 1.1添加maven依赖pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: ... 
- application实例
			application详解及实例 application对象用来在多个程序或者是多个用户之间共享数据,用户使用的所有application对象都是一样的,这与session对象不同.服务器一旦启动,就 ... 
- openstack 部署笔记--nova
			控制节点 配置用户与服务 $ . admin-openrc $ openstack user create --domain default --password-prompt nova $ open ... 
- C# 定时器  一个简单 并且可以直接运行的Demo
			using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ... 
- APPIUM Android 定位方式
			原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ... 
- 001-Two Sum
			Given an array of integers, return indices of the two numbers such that they add up to a specific ta ... 
