题目链接:

  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. 学习Android从青铜到王者之第一天

    1.Android四层架构 一.Linux Kernel 二.Libraries和Android Runtime 三.Application Framework 四.Applications 一.Li ...

  2. 各种Js插件汇总;JavaScript插件

    1.jquery信息提示插件: https://blog.csdn.net/u013517229/article/details/78291841 http://www.jqueryfuns.com/ ...

  3. HUNT:一款可提升漏洞扫描能力的BurpSuite漏洞扫描插件

    今天给大家介绍的是一款BurpSuite插件,这款插件名叫HUNT.它不仅可以识别指定漏洞类型的常见攻击参数,而且还可以在BurpSuite中组织测试方法. HUNT Scanner(hunt_sca ...

  4. iphone5s 耳机更换插头 EarPods change jack

    iphone5s 耳机使用了不到两年,出现了接头接触不良,话筒线短路的状况,经常自动出现暂停或者siri.买了一个新耳机,这几天有时间,把旧耳机修好了,更换了一个新的插头.   工具/原料   剥线钳 ...

  5. Linux性能诊断工具

    vmstat:虚拟内存状况 –swpd   free  buff  cache   si  so   in   cs 參考:http://www.cnblogs.com/ggjucheng/archi ...

  6. oracle获取字符串长度函数length()和lengthb()

    oracle获取字符串长度函数length()和lengthb()   lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算st ...

  7. TF-IDF与余弦类似性的应用(一):自己主动提取关键词

    作者: 阮一峰 日期: 2013年3月15日 原文链接:http://www.ruanyifeng.com/blog/2013/03/tf-idf.html 这个标题看上去好像非常复杂,事实上我要谈的 ...

  8. SSH三大框架整合配置详细步骤(3)

    5 配置Spring2.5 5.1 基础配置 1)        导入spring包.下载spring-framework-2.5.6并解压后,在spring-framework-2.5.6" ...

  9. Lightoj 1020 - A Childhood Game

    Allice先拿,最后拿球的输. Bob先拿,最后拿球的赢. 考虑Alice先拿球,当n=1时 Alice输  记dp[1]=0; n=2,  dp[2]=1 n=3,  dp[3]=1 因为n=1, ...

  10. javaweb项目数据库中数据乱码

    javaweb项目数据库中数据乱码 first: 排查原因: 打断点,查看到底是在执行存数据库操作之前就已经乱码了,还是存数据库操作后乱码的. 前者解决方案: 在web.xml里面加上: <fi ...