题目链接:

  Hdu 5348 MZL's endless loop

题目描述:

  给出一个无向图(有环,有重边),包含n个顶点,m条边,问能否给m条边指定方向,使每个顶点都满足abs(出度-入度)<2。如果能输出任意一种合法方案。

解题思路:

  其实仔细考虑一下,每个无向图都会存在合法方案的。证明:度数和为奇数的点只能为起点或者终点,度数为偶数的只能是环上的起点或者终点或者是中间点。有m条边,一共有2*m个端点。所以呢?当然是度数和为奇数的个肯定是偶数个,任意两个相结合都可以形成一条路。并不会有两条路的起点相同或者终点相同咯。

  由上可知所给的无向图是由若干条路径和若干个环组成的,我们可以对每个点进行dfs,当前遍历的点入度大于出度就正向遍历,否则反向遍历,直到遍历不到边为止。每遍历到一条边就将其删去,遇到环就回溯到环的起点。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#pragma comment (linker, "/STACK:102400000,102400000")
using namespace std; const int maxn = ;
struct node
{
int to, next, id;
}edge[maxn*];
int head[maxn], du[][maxn], sum[maxn];
int vis[maxn*], ans[maxn*], tot; void init ()
{
tot = ;
memset (head, -, sizeof(head));
memset (du, , sizeof(du));
//du[0][i]i点的入度,du[1][i]i的出度
memset (sum, , sizeof(sum));
//sum[i]i的度数总和
memset (vis, , sizeof(vis));
//边是否遍历过
memset (ans, -, sizeof(ans));
}
void Add (int from, int to, int id)
{
edge[tot].to = to;
edge[tot].id = id;
edge[tot].next = head[from];
head[from] = tot ++;
}
void dfs (int u, int y)
{
for (int i=head[u]; i!=-; i=edge[i].next)
{
if (vis[i])
{//当前边已经被访问过
head[u] = edge[i].next;
//删边
continue;
}
int v = edge[i].to;
if (v!=u && du[y][v]<du[y^][v])
//当前点若和u相连,abs(出度-入度)>1
continue;
vis[i] = vis[i^] = ;
if (i % )
ans[i/] = y^;
else
ans[i/] = y;
du[y][u] ++;
du[y^][v] ++;
head[u] = edge[i].next;
dfs (v, y);
break;
}
}
int main ()
{
int t, n, m;
scanf ("%d", &t);
while (t --)
{
scanf ("%d %d", &n, &m);
init ();
for (int i=; i<m; i++)
{
int u, v;
scanf ("%d %d", &u, &v);
Add (u, v, i);
Add (v, u, i);
sum [u] ++;
sum [v] ++;
}
for (int i=; i<=n; i++)
{
while (du[][i] + du[][i] < sum[i])
{
if (du[][i] <= du[][i])
dfs (i, );
else
dfs (i, );
}
}
for (int i=; i<m; i++)
printf ("%d\n", ans[i]);
}
return ;
}

Hdu 5348 MZL's endless loop (dfs)的更多相关文章

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

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

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

  3. HDU 5348 MZL's endless loop

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

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

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

  5. 图论 HDOJ 5348 MZL's endless loop

    题目传送门 /* 题意:给一个n个点,m条边的无向图,要求给m条边定方向,使得每个定点的出入度之差的绝对值小于等于1. 输出任意一种结果 图论:一个图,必定存在偶数个奇度顶点.那么从一个奇度定点深搜, ...

  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. hdu 5348 MZL&#39;s endless loop

    给一个无向图(事实上是有向的.可是没有指定边的方向),你须要指定边的方向,使得每一个点入度和出度相差不超过1. 事实上就是找很多条路径.合起来能走完这个图..先统计各个顶点的度.度为奇数必是起点或终点 ...

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

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

随机推荐

  1. Java: 创建自带依赖库的Jar包

    pom.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

  2. SD/MMC的Commands和Responses的总结

    SD总线通信是基于指令和数据比特流,起始位開始和停止位结束. SD总线通信有三个元素:1.Command:由host发送到卡设备.使用CMD线发送. 2.Response:从card端发送到host端 ...

  3. OCR简介及使用

    OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗.亮的模式确定其形状,然后用字符识别方法将形状翻译 ...

  4. NODE安装N管理出错

    Windows不支持,反正我在Linux上用过,从此脱离Win坑!

  5. HDU 1272: 小希的迷宫(并查集)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. 熊猫猪新系统測试之二:Mac OS X 10.10 优胜美地

    在第一篇windows 10技术预览版測试之后.本猫为大家呈现还有一个刚刚才更新的mac操作系统:"优胜美地".苹果相同一改以猫科动物为代号命名的传统.在10.9的Maverick ...

  7. [MAT]使用MAT比較多个heap dump文件

    使用MAT比較多个heap dump文件 调试内存泄露时,有时候适时比較2个或多个heap dump文件是非常实用的.这时须要生成多个单独的HPROF文件. 以下是一些关于怎样在MAT里比較多个hea ...

  8. CALayer与UIView的关系

    CALayer属于Core Animation部分的内容,比较重要而不太好理解.以下是园子中看到的一篇文章的摘录: 1. UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它.它本身完 ...

  9. 嵌入式驱动开发之--- 虚拟磁盘SBULL块设备驱动程序分析

     #define SBULL_MINORS  16         /* 每个sbull设备所支持的次设备号的数量 */  #define KERNEL_SECTOR_SIZE 512  // 本地定 ...

  10. MVC框架显示层——Velocity技术

    Velocity,名称字面翻译为:速度.速率.迅速,用在Web开发里,用过的人可能不多,大都基本知道和在使用Struts,到底Velocity和Struts(Taglib和Tiles)是如何联系?在技 ...