题目传送门

 /*
题意:给一个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的更多相关文章

  1. Hdu 5348 MZL's endless loop (dfs)

    题目链接: Hdu 5348 MZL's endless loop 题目描述: 给出一个无向图(有环,有重边),包含n个顶点,m条边,问能否给m条边指定方向,使每个顶点都满足abs(出度-入度)< ...

  2. 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 ...

  3. HDU 5348 MZL's endless loop(DFS去奇数度点+欧拉回路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给你一张图,有n个点,和m条无向边,让你把m条无向边变成有向边,使得每个节点的|出度- ...

  4. HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)

    题意: 给一个所有你可能想得到的奇葩无向图,要求给每条边定向,使得每个点的入度与出度之差不超过1.输出1表示定向往右,输出0表示定向往左. 思路: 网络流也是可以解决的!!应该挺简单理解的.但是由于复 ...

  5. HDU 5348 MZL's endless loop

    乱搞题...第一直觉是混合图的欧拉通路,但是感觉并没有多大关系.最终AC的做法是不断的寻找欧拉通路,然后给边标号.所有边访问了一遍,所有点访问了一遍,效率是o(n+m).不存在-1的情况. #incl ...

  6. 2015多校.MZL's endless loop(欧拉回路的机智应用 || 构造)

    MZL's endless loop Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Oth ...

  7. hdu5348 MZL's endless loop(欧拉回路)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud MZL's endless loop Time Limit: 3000/1500 ...

  8. [2015hdu多校联赛补题]hdu5348 MZL's endless loop

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题意:给你一个无向图,要你将无向图的边变成有向边,使得得到的图,出度和入度差的绝对值小于等于1, ...

  9. mutiset HDOJ 5349 MZL's simple problem

    题目传送门 /* 这题可以用stl的mutiset容器方便求解,我对这东西不熟悉,TLE了几次,最后用读入外挂水过. 题解有O(n)的做法,还以为我是侥幸过的,后来才知道iterator it写在循环 ...

随机推荐

  1. linux 常见名词及命令(三)

    tar 用于对文件打包压缩或解压. 示例: 打包并压缩文件:tar -czvf 压缩包名.tar.gz 文件名 解压并展开压缩包:tar -zxvf 压缩包名.tar.gz -c 创建压缩文件 -x ...

  2. Codeforces Round #489 (Div. 2) B、C

    B. Nastya Studies Informatics time limit per test 1 second memory limit per test 256 megabytes input ...

  3. Java并发包——使用新的方式创建线程

    Java并发包——使用新的方式创建线程 摘要:本文主要学习了如何使用Java并发包中的类创建线程. 部分内容来自以下博客: https://www.cnblogs.com/dolphin0520/p/ ...

  4. dubbo的泛化调用研究

    结论: 泛化调用需要继承一个类,在配置文件里需要明确指出generic=true; 泛化调用在书写provider代码时,变化不大: 泛化调用和普通调用的区别主要在consumer,从‘调用’的表面意 ...

  5. linux以下安装dnw

    [root@embedded secbulk]# make -C /lib/modules/`uname -r`/build M=`pwd` modules make: *** /lib/module ...

  6. 【Nginx】负载均衡-加权轮询策略剖析

    转自:江南烟雨 本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别. 如果Nginx是以反向代理的形式配置运行,那么对请求的实际处理需要转发到后端服 ...

  7. CF # 369 D2 D、E

    D,只要抓住每个点只有一个出度,那么图就能分成几个部分,而且可以发现,一个部分最多一个环. #include <iostream> #include <cstdio> #inc ...

  8. day4-hdfs的核心工作原理\写数据流程 \读数据流程

    namenode元数据管理要点 1.什么是元数据? hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>) 2.元数据由谁负责管理? namen ...

  9. day03-hdfs的客户端操作\hdfs的java客户端编程

    5.hdfs的客户端操作 客户端的理解 hdfs的客户端有多种形式: 1.网页形式 2.命令行形式 3.客户端在哪里运行,没有约束,只要运行客户端的机器能够跟hdfs集群联网 文件的切块大小和存储的副 ...

  10. linux下常用快捷方式

    一.终端最常用的快捷键: 1.新建终端窗口:crtl+shift+n 2.终端的切换:shift+左右箭头 3.挂起:crtl+s 4.解除挂起:crtl+q 5.清屏:crtl+l 二.命令行光标移 ...