给一个无向图(事实上是有向的。可是没有指定边的方向),你须要指定边的方向,使得每一个点入度和出度相差不超过1。

事实上就是找很多条路径。合起来能走完这个图。。先统计各个顶点的度。度为奇数必是起点或终点,否则是中间点或者同为起点和终点。

邻接表建图(建双向),先从每一个奇数度顶点出发找路径,再从偶数度顶点出发找路径。经过的边要删去不然超时。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
#include <stack> using namespace std; const int MAXM=300010;
const int MAXN=200010; struct edge{
int u,v;
}edges[MAXM*2]; int head[MAXN];
int pre[MAXM*2];
int Next[MAXM*2];
int deg[MAXN];
int ans[MAXM]; int ecnt;
int n,m; int init(){
memset(head,-1,sizeof(head));
memset(Next,-1,sizeof(Next));
memset(deg,0,sizeof(deg));
ecnt=0;
} void addedge(int u,int v){
edges[ecnt].u=u; edges[ecnt].v=v;
pre[ecnt]=head[u];
head[u]=ecnt;
ecnt++;
//
edges[ecnt].u=v; edges[ecnt].v=u;
pre[ecnt]=head[v];
head[v]=ecnt;
ecnt++;
} void dfs(int u){
while(head[u]!=-1){
deg[u]--;
int i=head[u];
int v=edges[i].v;
if(i&1){
ans[(i>>1)+1]=0;
}else{
ans[(i>>1)+1]=1;
} //remove edges.
int pp,nn;
if(head[u]==i){
head[u]=pre[i];
}
pp=pre[i];
nn=Next[i];
if(pp!=-1)Next[pp]=nn;
if(nn!=-1)pre[nn]=pp; int _i=i^1; if(head[v]==_i){
head[v]=pre[_i];
}
pp=pre[_i];
nn=Next[_i];
if(pp!=-1)Next[pp]=nn;
if(nn!=-1)pre[nn]=pp; u=v;
if(deg[v])deg[v]--; }
} int main(){
int t;
cin>>t;
while(t--){
init(); cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
addedge(u,v);
deg[u]++;
deg[v]++;
} for(int i=0;i<ecnt;i++){
if(pre[i]!=-1)Next[pre[i]]=i;
}
for(int i=1;i<=n;i++){
Next[head[i]]=-1;
} //先处理必为起点/终点的点
for(int i=1;i<=n;i++){
if(deg[i]&1){
dfs(i);
}
} for(int i=1;i<=n;i++){
if(deg[i]){
dfs(i);
}
}
for(int i=1;i<=m;i++){
printf("%d\n",ans[i]);
}
}
return 0;
}

hdu 5348 MZL&#39;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. HDU 5347(MZL&#39;s chemistry-打表)

    MZL's chemistry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. HDU 5344(MZL&#39;s xor-(ai+aj)的异或和)

    MZL's xor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total ...

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

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

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

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

随机推荐

  1. ef code first commad

    PM> enable-migrations 已在项目“EasyWeChat.Data”中启用迁移.若要覆盖现有迁移配置,请使用 -Force 参数. PM> add-migration 位 ...

  2. PHP获取不带后缀的文件名方法

    $filename = "test.txt"; $houzhui = substr(strrchr($filename, '.'), 1); $result = basename( ...

  3. Javascript 中的 apply与call详解

    一.方法定义 1.call 方法 语法:call(thisObj,arg1, arg2, argN) 参数 thisObj 可选项.将被用作当前对象的对象. arg1, arg2, , argN 可选 ...

  4. 模板:统计1~n内x的个数

    http://noi.openjudge.cn/ch0105/40/ 40:数1的个数-拓展变形 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个十进 ...

  5. Python_Tips[1] -> 利用 Python 的字典实现 Switch 功能

    利用 Python 的字典实现 Switch 功能 Python是没有switch语句的,当遇到需要实现switch语句的功能时,一般可以用if/else进行代替,但是还有一种更加简洁的实现方法,利用 ...

  6. 2-SAT浅谈

    2-SAT浅谈 一.2-SAT问题 首先,什么是$2-SAT$问题.现在给出这样一类问题:给出$n$个点和关于这$n$个点的$m$条限制条件,并且这$n$个点中,每一个点只有两种状态.对于上述问题,我 ...

  7. #424 Div2 E

    #424 Div2 E 题意 给出一个 n 个数的数列,从前往后取数,如果第一个数是当前数列的最小值,则取出,否则将它放到数列尾端,问使数列为空需要多少步操作. 分析 用数据结构去模拟. 线段树维护区 ...

  8. Sharepoint 查阅项字段和计算值字段的定义

    查阅项字段定义 <Field Type="Lookup" DisplayName="test2" Required="FALSE" E ...

  9. python 设计模式之代理模式

    代理模式在一般形式上是一个类函数接口.代理可以是这些事物的接口:网络连接,存储的对象,文件,或者其他资源(昂贵的或者不容易复制的). 一个众所周知的代理模式的例子就是引用计数的指针对象. 代理模式是结 ...

  10. 【BZOJ3524】Couriers

    题面 Description 给一个长度为\(n\)的序列\(a\).\(1\le a[i]\le n\). \(m\)组询问,每次询问一个区间\([l,r]\),是否存在一个数在\([l,r]\)中 ...