图论 HDOJ 5348 MZL's endless loop
/*
题意:给一个n个点,m条边的无向图,要求给m条边定方向,使得每个定点的出入度之差的绝对值小于等于1. 输出任意一种结果
图论:一个图,必定存在偶数个奇度顶点。那么从一个奇度定点深搜,当碰到另外一个奇度顶点时结束,这样能保证度数差<=1
3.5 详细解释:http://blog.csdn.net/ZSGG_ACM/article/details/47287681
*/
/************************************************
* Author :Running_Time
* Created Time :2015-8-5 18:55:37
* File Name :F.cpp
************************************************/
#pragma comment (linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e5 + ;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + ;
struct Edge {
int v, nex, dir;
}e[MAXN*];
int head[MAXN];
int deg[MAXN];
int n, m, tot; void init(void) {
tot = ;
memset (head, -, sizeof (head));
memset (deg, , sizeof (deg));
} void add_edge(int u, int v) {
e[tot].v = v;
e[tot].nex = head[u];
e[tot].dir = ;
head[u] = tot++;
} bool DFS(int u) {
for (int &i=head[u]; ~i; i=e[i].nex) {
int v = e[i].v;
int dir = e[i].dir ^ e[i^].dir;
if (dir) continue;
e[i].dir = ;
if (deg[v]) {
deg[v] = ; return true;
}
if (DFS (v)) return true;
}
return false;
} void work(void) {
for (int i=; i<=n; ++i) {
if (deg[i]) {
deg[i] = ; DFS (i);
}
}
for (int i=; i<=n; ++i) {
while (~head[i]) DFS (i);
}
for (int i=; i<tot; i+=) {
if (e[i].dir) puts ("");
else puts ("");
}
} int main(void) { //HDOJ 5348 MZL's endless loop
int T; scanf ("%d", &T);
while (T--) {
init ();
scanf ("%d%d", &n, &m);
for (int i=; i<=m; ++i) {
int u, v; scanf ("%d%d", &u, &v);
deg[u] ^= ; deg[v] ^= ;
add_edge (u, v); add_edge (v, u);
}
work ();
} return ;
}
/************************************************
* Author :Running_Time
* Created Time :2015-8-5 18:55:37
* File Name :F.cpp
************************************************/
#pragma comment (linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e5 + ;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + ;
struct Edge {
int v, nex, vis;
}e[MAXN*];
int head[MAXN];
int deg[MAXN];
int ans[MAXN*];
int n, m, tot; void init(void) {
tot = ;
memset (head, -, sizeof (head));
memset (deg, , sizeof (deg));
} void add_edge(int u, int v) {
e[tot].v = v;
e[tot].nex = head[u];
e[tot].vis = ;
head[u] = tot++;
} void DFS(int u) {
for (int &i=head[u]; ~i; ) {
int v = e[i].v;
if (e[i].vis) {
i = e[i].nex; continue;
}
e[i].vis = ; e[i^].vis = ;
ans[i>>] = i & ;
deg[u]--; deg[v]--;
i = e[i].nex;
DFS (v);
}
} void patch(void) {
int pre = -;
for (int i=; i<=n; ++i) {
if (deg[i] & ) {
if (pre == -) {
pre = i;
}
else {
add_edge (pre, i); add_edge (i, pre);
deg[pre]++; deg[i]++;
pre = -;
}
}
}
} void work(void) {
patch ();
for (int i=; i<=n; ++i) {
if (deg[i]) DFS (i);
}
for (int i=; i<m; ++i) printf ("%d\n", ans[i]);
} int main(void) {
int T; scanf ("%d", &T);
while (T--) {
init ();
scanf ("%d%d", &n, &m);
for (int i=; i<=m; ++i) {
int u, v; scanf ("%d%d", &u, &v);
deg[u]++; deg[v]++;
add_edge (u, v); add_edge (v, u);
}
work ();
} return ;
}
不太清楚的代码
图论 HDOJ 5348 MZL's endless loop的更多相关文章
- Hdu 5348 MZL's endless loop (dfs)
题目链接: Hdu 5348 MZL's endless loop 题目描述: 给出一个无向图(有环,有重边),包含n个顶点,m条边,问能否给m条边指定方向,使每个顶点都满足abs(出度-入度)< ...
- 2015 Multi-University Training Contest 5 hdu 5348 MZL's endless loop
MZL's endless loop Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- HDU 5348 MZL's endless loop(DFS去奇数度点+欧拉回路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给你一张图,有n个点,和m条无向边,让你把m条无向边变成有向边,使得每个节点的|出度- ...
- HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
题意: 给一个所有你可能想得到的奇葩无向图,要求给每条边定向,使得每个点的入度与出度之差不超过1.输出1表示定向往右,输出0表示定向往左. 思路: 网络流也是可以解决的!!应该挺简单理解的.但是由于复 ...
- HDU 5348 MZL's endless loop
乱搞题...第一直觉是混合图的欧拉通路,但是感觉并没有多大关系.最终AC的做法是不断的寻找欧拉通路,然后给边标号.所有边访问了一遍,所有点访问了一遍,效率是o(n+m).不存在-1的情况. #incl ...
- 2015多校.MZL's endless loop(欧拉回路的机智应用 || 构造)
MZL's endless loop Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- hdu5348 MZL's endless loop(欧拉回路)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud MZL's endless loop Time Limit: 3000/1500 ...
- [2015hdu多校联赛补题]hdu5348 MZL's endless loop
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给你一个无向图,要你将无向图的边变成有向边,使得得到的图,出度和入度差的绝对值小于等于1, ...
- mutiset HDOJ 5349 MZL's simple problem
题目传送门 /* 这题可以用stl的mutiset容器方便求解,我对这东西不熟悉,TLE了几次,最后用读入外挂水过. 题解有O(n)的做法,还以为我是侥幸过的,后来才知道iterator it写在循环 ...
随机推荐
- POJ3352-Road Construction(边连通分量)
It's almost summer time, and that means that it's almost summer construction time! This year, the go ...
- HDU 3602 2012【01 背包变形】
题意: 有 n 个团队和 m 艘船,每艘船的载客量为 k,每个团队的人数为ai+1 ,转载该团队可获利润 bi,要求每个团队的所有人必须在同一艘船上, 且团队优先级高的团队所在船编号不能大于优先级低的 ...
- wget下载网络图片
wget http....... --no-check-certificate
- rsyslog trouble shooting
openstack,swift的log不输出了.trouble shooting过程 , 发现我们的程序 /var/log/swift/proxy.log等总是不输出log. 因为log rsyslo ...
- 百万级 TCP 长连接即时通讯框架 t-io
原文:http://www.t-io.org:9292/ https://www.oschina.net/p/t-io
- intellij使用tomcat搭建servlet运行时环境
http://suiyu.online/2017/08/01/intellij%E4%BD%BF%E7%94%A8tomcat%E6%90%AD%E5%BB%BAservlet%E8%BF%90%E8 ...
- Linux学习系列之Inotify+Rsync实现实时数据同步
Inotify简介 inotify介绍 inotify是一种强大的.异步的文件系统监控机制,linux内核从2.6.13起,加入了inotify的支持,通过inotify可以监控文件系统中添加.删除. ...
- windows 7 忘記密碼,用“带命令行的安全模式”
net user administrator /active:yes net user tester /add net localgroup administrators tester /add
- 一起talk C栗子吧(第七回:C语言实例--进制转换)
各位看官们.大家好,从今天開始.我们讲大型章回体科技小说 :C栗子,也就是C语言实例. 闲话休提, 言归正转.让我们一起talk C栗子吧! 看官们.上一回中咱们说的是生成随机数的样例.这一回咱们说的 ...
- 【Android基础】App签名与打包
签名的意义 1. 为了保证程序开发人员的合法 2. 防止部分人通过使用同样的Package Name(包名)来混淆替换已安装的程序 3. 保证我们每次公布的版本号的一致性(保证签名一致才干升级) 签名 ...