CF 36E Two Paths——欧拉路
题目: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——欧拉路的更多相关文章
- CF 36E Two Paths
传送门 真实的自闭= =+ 考试的时候老师明明说了可以路径为空T^T 然后光荣的挂掉了 20分的链[明明是最送分的] 上来就看出来欧拉回路了嘛 然后思考了一下大概奇点配个对 删一条简单路径剩下的跑欧拉 ...
- CF 508D Tanya and Password(无向图+输出欧拉路)
( ̄▽ ̄)" //不知道为什么,用scanf输入char数组的话,字符获取失效 //于是改用cin>>string,就可以了 //这题字符的处理比较麻烦,输入之后转成数字,用到函 ...
- Codeforces 789D Weird journey - 欧拉路 - 图论
Little boy Igor wants to become a traveller. At first, he decided to visit all the cities of his mot ...
- 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 ...
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- POJ1386Play on Words[有向图欧拉路]
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11846 Accepted: 4050 De ...
- hdu1161 欧拉路
欧拉路径是指能从一个点出发能够“一笔画”完整张图的路径:(每条边只经过一次而不是点) 在无向图中:如果每个点的度都为偶数 那么这个图是欧拉回路:如果最多有2个奇数点,那么出发点和到达点必定为该2点,那 ...
- UVA10054The Necklace (打印欧拉路)
题目链接 题意:一种由彩色珠子组成的项链.每个珠子的两半由不同的颜色组成.相邻的两个珠子在接触的地方颜色相同.现在有一些零碎的珠子,需要确定他们是否可以复原成完整的项链 分析:之前也没往欧拉路上面想, ...
- 洛谷 P1341 无序字母对 Label:欧拉路 一笔画
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
随机推荐
- 【HackerRank】Cut the tree
题目链接:Cut the tree 题解:题目要求求一条边,去掉这条边后得到的两棵树的节点和差的绝对值最小. 暴力求解会超时. 如果我们可以求出以每个节点为根的子树的节点之和,那么当我们去掉一条边(a ...
- Chrome 的 Rendering 监听器
在研究动画优化时,有被安利一款这个...啥,额,就是,唔...就是一个能让我们看到动画卡不卡的监听器 火狐的“高亮重绘区域”个人感觉并不好用,而 Safari 竟然没找到,而 IE11 也没有(公司的 ...
- imx6solo wm8960始终没有声音输出
我尝试各种办法,wm8960始终不能得到声音输出.调试过程如下: 首先,打开电源使能脚: ret=gpio_request(SABRESD_CODEC_PWR_EN,"audio_pwr_e ...
- Hadoop相关知识整理系列之一:HBase基本架构及原理
1. HBase框架简单介绍 HBase是一个分布式的.面向列的开源数据库,它不同于一般的关系数据库,是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式.HBas ...
- Java Hibernate 5.3.x
SchemeExport Hibernate根据实体类和实体类映射文件自动生成表结构. 示例代码: <?xml version='1.0' encoding='utf-8'?> <! ...
- MongoDB快速入门(六)- 更新文档
更新文档 MongoDB的update()和save()方法用于更新文档到一个集合. update()方法将现有的文档中的值更新,而save()方法使用传递到save()方法的文档替换现有的文档. M ...
- input ajax自动补全
页面 <div class="manage-Car-add-info-sn"> <p style="width:25%; height:70%;floa ...
- Flume的Avro Sink和Avro Source研究之二 : Avro Sink
啊,AvroSink要复杂好多:< 好吧,先确定主要问题: AvroSink为啥这么多代码?有必要吗?它都有哪些逻辑需要实现? 你看,avro-rpc-quickstart里是这么建client ...
- Python之flask总结
一.flask a.Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收htt ...
- Python ssh 远程执行shell命令
工具 python paramiko 远程执行命令 import paramiko ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ...