图论 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写在循环 ...
随机推荐
- CF676E:The Last Fight Between Human and AI
人类和电脑在一个多项式上进行博弈,多项式的最高次项已知,一开始系数都不确定.电脑先开始操作,每次操作可以确定某次项的系数,这个系数可以是任意实数.给出一个博弈中间状态,最后如果这个多项式被x-K整除就 ...
- 安装最新版本的zabbix
1. 先安装php5.4 最新版本: yum安装php5.4或5.5 https://blog.csdn.net/MarkBoo/article/details/49424183 2. 然后参照官网或 ...
- 饭卡-HDU2546(01背包)
http://acm.hdu.edu.cn/showproblem.php?pid=2546 饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory L ...
- neutron trouble shooting - ip can not ping
neutron创建了一个router后,显示列表如下: [root@controller01 keystone]# neutron router-port-list router +--------- ...
- Bundle格式文件的安装
安装VMware Workstation for Linux,文件是Bundle格式,安裝如下: 1 su要先取得root權限2hmod +x VMware-Workstation-Full-7.1. ...
- [TypeScript] Collect Related Strings in a String Enum in TypeScript
As of TypeScript 2.4, it is now possible to define string enums, or more precisely, enums with strin ...
- HDU 4983 Goffi and GCD(数论)
HDU 4983 Goffi and GCD 思路:数论题.假设k为2和n为1.那么仅仅可能1种.其它的k > 2就是0种,那么事实上仅仅要考虑k = 1的情况了.k = 1的时候,枚举n的因子 ...
- HDU 4923 Room and Moor(瞎搞题)
瞎搞题啊.找出1 1 0 0这样的序列,然后存起来,这样的情况下最好的选择是1的个数除以这段的总和. 然后从前向后扫一遍.变扫边进行合并.每次合并.合并的是他的前驱.这样到最后从t-1找出的那条链就是 ...
- linux启动基本流程
linux启动序列 1.CPU初始化 CPU自身初始化.从某个固定位置(0xfffffff0)取指令并运行,该指令为跳转指令.跳转到BIOS代码的首部. 2.装载BIOS BIOS被固化在 ...
- [办公自动化]如何让excel图表标签中显示最新值数据
同事做了一张excel图表,希望最新的数据显示数据标签,其他都不显示.并且当单元格的数据新增加时,这个标签要能自动更新. 这里需要用到公式,获取到这个最新值.在b2输入公式=lookup(9e+307 ...