题目传送门

 /*
题意:给一个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 ;
}

不太清楚的代码

最新文章

  1. Spring学习记录(十二)---AOP理解和基于注解配置
  2. 配置OpenCV产生flann\logger.h(66): error C4996: &#39;fopen&#39;: This function or variable may be unsafe问题[zz]
  3. BZOJ 3295 【Cqoi2011】 动态逆序对
  4. 由 excel 转换为 markdown,及收获
  5. push submodule
  6. 怎样手动添加 Sublime 3 右键菜单
  7. PIC32MZ tutorial -- Input Capture
  8. instanceof、==号、Objetc类
  9. 文本阴影text-shadow
  10. flask twisted 结合方案
  11. Android JDK配置使支持Gradle更新,Maven安装
  12. SpringCloud系列——Zuul 动态路由
  13. 解决 VS2017 打断点无效
  14. WebSocketTest 异步通讯,实时返回数据
  15. winform中DataGridView实现分页功能
  16. MongoDB一键安装(定制端口)
  17. Codeforces Round #429 (Div. 2) - D Leha and another game about graph
  18. java GUI 返回图片源码
  19. jquery 初始化数据 添加html 第一次玩0.0
  20. 《C#从现象到本质》读书笔记(二)第2章 C#类型基础(上)

热门文章

  1. [ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换
  2. Parent and son
  3. springmvc json 数据
  4. HashMap源码分析1:添加元素
  5. Ubuntu 16.04中iptables的工具简介(iptables/iptables-restore/iptables-xml/iptables-apply/iptables-save)
  6. java开发中涉及到的调优
  7. linux network name space
  8. IPv6 Ready Logo测试环境搭建
  9. Windows 老是弹出要自动拨号连接怎么办
  10. Linux系统下ssh登陆很慢的解决办法