题目: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. HP小型机维护

    (一)文件系统维护 . 监控文件系统的使用 # bdf . 监控文件目录的使用 # du -sk /myfs2/* (二)网络系统维护 1. 相关配置文件 1). 主机名定义文件:/etc/hosts ...

  2. P4271 [USACO18FEB]New Barns

    题目 P4271 [USACO18FEB]New Barns 做法 这题很长见识啊!! 知识点:两棵树\((A,B)\)联通后,新树的径端点为\(A\)的径端点与\(B\)的径端点的两点 不断加边,那 ...

  3. latin-1

    Latin1是ISO-8859-1的别名,有些环境下写作Latin-1.ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII ...

  4. java基础之final/static/static final

    一.final 1.final修饰变量(常量) final修饰的成员变量表示常量,一旦给定初值既无法改变 2.final方法 final修饰方法,表示该方法不能被子类重写 好处:比非final方法要快 ...

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

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

  6. iptables DNAT、SNAT和MASQUERATE

    MASQUERADE 地址伪装,和SNAT功能一样,只不过SNAT使用固定IP地址,MASQUERADE使用网卡上的地址. SNAT配置: iptables -t nat -A POSTROUTING ...

  7. Efficient live disk backup with active blockcommit

    列出当前正在使用的block device $ virsh domblklist vm1 Target Source ----------------------------------------- ...

  8. 华丽导航CSS下拉菜单特效

    华丽导航CSS下拉菜单特效,华丽导航,导航特效,CSS,下拉菜单,华丽特效. 代码地址:http://www.huiyi8.com/sc/26811.html 风景图片网:http://www.hui ...

  9. Eclipse下使用Maven建立简单Springboot程序

    1.创建Maven工程 2.编写pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  10. 2017-02-20 Sql Server2016安装后无法找到Microsoft Sql Server Management Studio管理器

    最近安装的sql sever2016后发现没有Sql server management studio管理工具,无法操作sql server 解决方案,可去官网单独下载 Sql Server Mana ...