题目:http://codeforces.com/contest/36/problem/E

找出两条欧拉路覆盖无向图。

套上欧拉路模板。用过的边要记录。

注意 一个连通块、4个奇度数点 的情况是在两个奇度数点之间连一条边,跑完欧拉路后再断开!而不是……

特别奇怪的一点是如果不写那个  跑完欧拉路后发现队列里的边不足m条就输出-1  就会WA。

  但Zinn没有这个特判,我也觉得这种情况很奇怪。可能是代码别的地方写错了?

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e4+;
int n,m,mp[N],hd[N],xnt,deg[N],col[N],cnt;
int sta[N],top,q[N],jd,ct1;
bool use[N],vis[N];
struct Ed{
int nxt,to,bh;Ed(int n=,int t=,int b=):nxt(n),to(t),bh(b) {}
}ed[N<<];
void add(int x,int y,int b)
{
ed[++xnt]=Ed(hd[x],y,b);hd[x]=xnt;
ed[++xnt]=Ed(hd[y],x,b);hd[y]=xnt;
}
void dfs(int cr)
{
col[cr]=cnt;if(deg[cr]&)q[++jd]=cr;
for(int i=hd[cr];i;i=ed[i].nxt)
if(!col[ed[i].to])dfs(ed[i].to);
}
void dfs(int rt,int cr,int fa)
{
vis[cr]=;
for(int i=hd[cr];i;/*i=hd[cr]*/i=ed[i].nxt)
if(!use[ed[i].bh])
{
// hd[cr]=ed[i].nxt;//!
use[ed[i].bh]=;
dfs(rt,ed[i].to,cr);
sta[++top]=ed[i].bh;
if(ed[i].bh==m+)ct1=--top;
}
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d",&m);int x,y;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(!mp[x])mp[x]=++n;
if(!mp[y])mp[y]=++n;
deg[mp[x]]++;deg[mp[y]]++;
add(mp[x],mp[y],i);
}
for(int i=;i<=n;i++)
if(!col[i])
{
cnt++;dfs(i);
}
if(cnt>||jd>||m==){printf("-1\n");return ;}
if(cnt==&&jd==&&col[q[]]==col[q[]]==col[q[]]==col[q[]]){printf("-1\n");return ;}
memset(vis,,sizeof vis);
if(cnt==)
{
if(jd)
{
dfs(q[],q[],);ct1=top;
if(jd==)
{
for(int i=;i<=n;i++)
if(!vis[i]){dfs(i,i,);break;}
}
else{
for(int i=;i<=;i++)
if(!vis[q[i]]){dfs(q[i],q[i],);break;}
}
}
else{
dfs(,,);ct1=top;
for(int i=;i<=n;i++)if(!vis[i]){dfs(i,i,);break;}
}
}
else{
if(jd)
{
if(jd==){
add(q[],q[],m+);dfs(q[],q[],);/////////
}
else dfs(q[],q[],),ct1=top;
}
else ct1=m,dfs(,,);
}
if(top!=m){printf("-1");return ;}///////?
if(ct1==top)
{
printf("1\n%d\n",sta[top]);
printf("%d\n",ct1-);
for(int i=top-;i;i--)printf("%d ",sta[i]);
return ;
}
printf("%d\n",ct1);
for(int i=ct1;i;i--)
printf("%d ",sta[i]);
printf("\n");
printf("%d\n",top-ct1);
for(int i=top;i>ct1;i--)
printf("%d ",sta[i]);
return ;
}

CF 36E Two Paths——欧拉路的更多相关文章

  1. CF 36E Two Paths

    传送门 真实的自闭= =+ 考试的时候老师明明说了可以路径为空T^T 然后光荣的挂掉了 20分的链[明明是最送分的] 上来就看出来欧拉回路了嘛 然后思考了一下大概奇点配个对 删一条简单路径剩下的跑欧拉 ...

  2. CF 508D Tanya and Password(无向图+输出欧拉路)

    ( ̄▽ ̄)" //不知道为什么,用scanf输入char数组的话,字符获取失效 //于是改用cin>>string,就可以了 //这题字符的处理比较麻烦,输入之后转成数字,用到函 ...

  3. Codeforces 789D Weird journey - 欧拉路 - 图论

    Little boy Igor wants to become a traveller. At first, he decided to visit all the cities of his mot ...

  4. Codeforces Round #407 (Div. 2) D. Weird journey(欧拉路)

    D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  5. 洛谷P1341 无序字母对[无向图欧拉路]

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

  6. POJ1386Play on Words[有向图欧拉路]

    Play on Words Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11846   Accepted: 4050 De ...

  7. hdu1161 欧拉路

    欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...

  8. UVA10054The Necklace (打印欧拉路)

    题目链接 题意:一种由彩色珠子组成的项链.每个珠子的两半由不同的颜色组成.相邻的两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确定他们是否可以复原成完整的项链 分析:之前也没往欧拉路上面想, ...

  9. 洛谷 P1341 无序字母对 Label:欧拉路 一笔画

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...

随机推荐

  1. HTTP学习笔记01-URL

    URI URL语法 相对URL和绝对URL 相对URL URL的常用协议 http https mailto ftp rtsprtspu file news telnet 展望美好的未来 1.URI ...

  2. 离乡与理想 Demo

    离乡与理想---理想不分黑白 踏上了火车,离开家乡背着幻梦,站累了有人叫我幸福,叫我快乐而我是没有名字的流浪的日子,已数不清有多少带着理想,一路飞翔路上遇见困难,一定要坚强因为理想已离乡 我为理想而离 ...

  3. php数组函数-array_merge()

    array_merge()函数把两个或多个数组合并为一个数组. 如果键名有重复,该键的键值为最后一个键名对应的值.如果数组是数字 索引,则键名会以连续方式重新索引. 注:如果仅仅向array_merg ...

  4. 一步一步粗谈linux文件系统(三)----超级块(superblock)【转】

    本文转载自:https://blog.csdn.net/fenglifeng1987/article/details/8302921 超级块是来描述整个文件系统信息的,可以说是一个全局的数据结构,可以 ...

  5. linux jdk安装。

    我使用的centos 7: 安转sun公司的jdk要先检查系统中是否安装jdk,一般来说Centos系统会默认会安装OpenJDK,但是openJDK部分内容 与SUN JDK不兼容,因此下面进行重新 ...

  6. 在openstack环境中安装rackspace private cloud --1 环境准备

    在一个openstack环境中安装rackspace private cloud, 环境准备: 在good-net网络中创建3个虚拟机vm Network Detail: good-net Netwo ...

  7. Jquery取得iframe中元素的几种方法Javascript Jquery获取Iframe的元素、内容或者ID

    query取得iframe中元素的几种方法 在iframe子页面获取父页面元素代码如下: $('#objId', parent.document);// 搞定... 在父页面 获取iframe子页面的 ...

  8. canvas绘制多角形小练习

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 实现继承+接口继承+虚方法+隐藏方法+this/base+抽象类+密封类/方法+修饰符

    概念: 在上一节课中学习了如何定义类,用类当做模板来声明我们的数据. 很多类中有相似的数据,比如在一个游戏中,有Boss类,小怪类Enemy,这些类他们有很多相同的属性,也有不同的,这个时候我们可以使 ...

  10. 解决CentOS 6环境时区、日期、时间同步方法

    有些时候我们在选择的VPS服务商提供的VPS主机方案安装系统.安装建站环境之后就直接上马网站,但是我们会有发现发布的文章或者有些时候设置的自动执行脚本时间与我们实际的时间不符合.甚至有些程序是需要与本 ...