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的时候松弛加上$ < $变成 ...
随机推荐
- html的img标签 强大的title
示例: <img src="smiley-2.gif" alt="Smiley face" width="42" height=&qu ...
- 机器学习理论基础学习10--- 高斯混合模型GMM
一.什么是高斯混合模型? 高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布 ...
- 2.keras实现-->字符级或单词级的one-hot编码 VS 词嵌入
1. one-hot编码 # 字符集的one-hot编码 import string samples = ['zzh is a pig','he loves himself very much','p ...
- 018-DNS解析过程与配置DNS服务
- 基于Axis1.4的webservice接口开发(代码开发)
基于Axis1.4的webservice接口开发(代码开发) 一.开发环境: 我的开发环境是MyEclipse 2015+Apache-Tomcat-8.0.21. 二.代码开发: 1.新建一个Web ...
- linux常用命令:date 命令
在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...
- eclispe 相关设置
1. 关闭js文件校验: 1). windows->preference->Java Script->Validator->Errors/Warnings->Enable ...
- php array_multisort对数据库结果多个字段进行排序
php array_multisort对数据库结果多个字段进行排序$data 数组中的每个单元表示一个表中的一行.这是典型的数据库记录的数据集合. 例子中的数据如下:volume | edition ...
- Linux中Postfix邮件接收配置(四)
Dovecot介绍 MRA邮件取回代理也有很多如courier-imap,cyrus-imap和dovecot这三个个工具,下面重点介绍Dovecot: 1.高安全性.据 Dovecot 的作者声称, ...
- ES6学习--对象属性的遍历
ES6一共有5种方法可以遍历对象的属性. (1)for...in for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性). (2)Object.keys(obj) Object. ...