题目传送门(内部题119)


输入格式

  第一行,三个整数$T,M,N$。
  接下来的$N$行,每行两个整数$u_i,v_i$($i$从$1$开始编号)。允许$u_i=v_i$,也允许同样的简单词多次出现。


输出格式

  第一行,一个字符串$YES$或$NO$,表示能否将这$N$个简单词组合成一个复杂词。
  如果能,则第二行输出$N$个整数,第$i$个数$p_i$表示组成复杂词的第$i$个简单词是输入的编号为$|p_i|$的简单词。注意,当$T=1$且使用编号为$|p_i|$的简单词时交换了两个字符的顺序,则输出编号的相反数,否则输出编号。如果有多组解,输出任意一组即可。


样例

样例输入1:

1 3 2
2 3
1 3

样例输出1:

YES
2 -1

样例输入2:

2 5 5
2 3
2 5
3 4
1 2
4 2

样例输出2:

YES
4 1 3 5 2


数据范围与提示

样例$1$解释:

如果用$a,b,c$分别表示字符$1,2,3$,则第一个简单词为$bc$,第二个简单词为$ac$,所以可以交换第一个简单词的两个字符,这样就可以组合成$acb$,所以输出$2\ -1$。

数据范围:


题解

先来明确一下题意,对于$T=1$的情况,可以交换多个,而不是一个。

转化题意,对于$T=1$的情况,则是找无项图的欧拉路;对于$T=2$的情况,则是有向图。

代码实现上需要注意环的情况,还需要反着输出。

时间复杂度:$\Theta(N+M)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec{int nxt,to,w;}e[400002];
int head[200001],cnt=1,tot,top,sum;
int T,M,N;
pair<int,int> a[200001];
int ans[200001],sta[200001],du[200001],in[200001],out[200001];
bool vis[400002],v[200001];
void add(int x,int y,int w)
{
e[++cnt].nxt=head[x];
e[cnt].to=y;
e[cnt].w=w;
head[x]=cnt;
}
void dfs(int x)
{
vis[x]=1;
tot++;
for(int i=head[x];i;i=e[i].nxt)
if(!vis[e[i].to])dfs(e[i].to);
}
void dfs1(int x,int in)
{
for(int i=head[x];i;i=e[i].nxt)
{
if(vis[i])continue;
vis[i]=vis[i^1]=1;
head[x]=i;
dfs1(e[i].to,i);
i=head[x];
}
ans[++ans[0]]=e[in].w;
}
void dfs2(int x,int in)
{
if(!v[x]){v[x]=1;tot++;}
for(int i=head[x];i;i=e[i].nxt)
{
if(vis[i])continue;
head[x]=i;
vis[i]=1;dfs2(e[i].to,i);
i=head[x];
}
ans[++ans[0]]=e[in].w;
}
void work1()
{
for(int i=1;i<=N;i++)
{
scanf("%d%d",&a[i].first,&a[i].second);
if(!vis[a[i].first]){vis[a[i].first]=1;sum++;}
if(!vis[a[i].second]){vis[a[i].second]=1;sum++;}
add(a[i].first,a[i].second,i);
add(a[i].second,a[i].first,-i);
du[a[i].first]++;
du[a[i].second]++;
}
memset(vis,0,sizeof(vis));
dfs(a[1].first);
if(sum!=tot){puts("NO");exit(0);}
memset(vis,0,sizeof(vis));
for(int i=1;i<=N;i++)
{
if((du[a[i].first]&1)&&!vis[a[i].first]){sta[++top]=a[i].first;vis[a[i].first]=1;}
if((du[a[i].second]&1)&&!vis[a[i].second]){sta[++top]=a[i].second;vis[a[i].second]=1;}
}
memset(vis,0,sizeof(vis));
if(!top)dfs1(a[1].first,0);
else if(top==2)dfs1(sta[1],0);
else{puts("NO");exit(0);}
puts("YES");
for(int i=N;i;i--)printf("%d ",ans[i]);
}
void work2()
{
for(int i=1;i<=N;i++)
{
scanf("%d%d",&a[i].first,&a[i].second);
if(!vis[a[i].first]){vis[a[i].first]=1;sum++;}
if(!vis[a[i].second]){vis[a[i].second]=1;sum++;}
add(a[i].first,a[i].second,i);
out[a[i].first]++;
in[a[i].second]++;
}
memset(vis,0,sizeof(vis));
for(int i=1;i<=N;i++)
{
if(in[a[i].first]!=out[a[i].first])
{
if(in[a[i].first]!=out[a[i].first]+1&&in[a[i].first]!=out[a[i].first]-1){puts("NO");exit(0);}
if(!vis[a[i].first]){sta[++top]=a[i].first;vis[a[i].first]=1;}
}
if(in[a[i].second]!=out[a[i].second])
{
if(in[a[i].second]!=out[a[i].second]+1&&in[a[i].second]!=out[a[i].second]-1){puts("NO");exit(0);}
if(!vis[a[i].second]){sta[++top]=a[i].second;vis[a[i].second]=1;}
}
}
memset(vis,0,sizeof(vis));
if(!top)dfs2(a[1].first,0);
else if(top==2)
{
if(in[sta[1]]==out[sta[1]]-1)dfs2(sta[1],0);
if(in[sta[2]]==out[sta[2]]-1)dfs2(sta[2],0);
if(in[sta[1]]==out[sta[1]]-1&&in[sta[2]]==out[sta[2]]-1){puts("NO");exit(0);}
if(in[sta[1]]==out[sta[1]]+1&&in[sta[2]]==out[sta[2]]+1){puts("NO");exit(0);}
}
else{puts("NO");exit(0);}
if(tot!=sum){puts("NO");exit(0);}
puts("YES");
for(int i=N;i;i--)printf("%d ",ans[i]);
}
int main()
{
scanf("%d%d%d",&T,&M,&N);
if(T==1)work1();
else work2();
return 0;
}

rp++

[CSP-S模拟测试]:组合(欧拉路)的更多相关文章

  1. 星际旅行(欧拉路,欧拉回路)(20190718 NOIP模拟测试5)

    瞎搞了一个ans+=du*(du-1)/2 wa20分,好桑心(话外音:居然还有二十分,出题人太周到了) 还是判欧拉路 题解没太仔细想,感觉还是kx的思路明白 具体就是:因为每条边要走两遍,可以把一条 ...

  2. [CSP-S模拟测试]:星际旅行(欧拉路)

    题目传送门(内部题4) 输入格式 第一行两个整数$n,m$,表示行星和虫洞的数量.接下来$m$行,每行两个整数$u,v$,表示存在一个双向虫洞直接连接$u$和$v$.每一个虫洞最多会被描述一次. 输出 ...

  3. hiho48 : 欧拉路·一

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最后的宝藏.现在他们控制的 ...

  4. SGU 101.Domino (欧拉路)

    时间限制: 0.5 sec 空间限制: 4096 KB 描述 多米诺骨牌,一种用小的方的木块或其他材料,每个都被一些点在面上标记,这些木块通常被称为骨牌.每个骨牌的面都被一条线分成两个   方形,两边 ...

  5. Mockito:一个强大的用于Java开发的模拟测试框架

    https://blog.csdn.net/zhoudaxia/article/details/33056093 介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用 ...

  6. [hihoCoder] 第四十九周: 欧拉路·一

    题目1 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最 ...

  7. hiho一下 第四十九周 题目1 : 欧拉路·一【无向图 欧拉路问题】

    题目1 : 欧拉路·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho最近在玩一个解密类的游戏,他们需要控制角色在一片原始丛林里面探险,收集道具,并找到最 ...

  8. [考试反思]1104csp-s模拟测试100: 终结

    这么好的整数场,就终结了我连续莫名考好的记录. 功德圆满了... 还是炸了啊.而且炸的还挺厉害(自己又上不去自己粘的榜单啦) 说实在的这场考试做的非常差劲.虽说分数不算特别低但是表现是真的特别差. T ...

  9. [考试反思]0818NOIP模拟测试25:清心

    两机房分开考试.拿到了令人orz的A卷. 15本校+3外校=18人参加 排名第7,没前途.大不了去第二机房... skyh也很强了.tdcp拿来一个诡异的. 86,85,79.然后是我垃圾的.在后面差 ...

随机推荐

  1. [Nest] 05.nest之数据库

    数据库 Nest 与数据库无关,允许您轻松地与任何 SQL 或 NoSQL 数据库集成.根据您的偏好,您有许多可用的选项.一般来说,将 Nest 连接到数据库只需为数据库加载一个适当的 Node.js ...

  2. 学习笔记--APIO 2018 二分专题 By wuvin

    前言: 在APIO 2018 Day2下午听wuvin讲二分,听了一上午的神仙,现在终于有可以听懂了. 专题: 平均边权最大 题目链接:https://www.questoj.cn/problem/3 ...

  3. scrapy爬取猫眼电影排行榜

    做爬虫的人,一定离不开的一个框架就是scrapy框架,写小项目的时候可以用requests模块就能得到结果,但是当爬取的数据量大的时候,就一定要用到框架. 下面先练练手,用scrapy写一个爬取猫眼电 ...

  4. sqlserver2016 management tool v18

    安装完sql server 2016 sp1版本后再安装管理工具v18版本,启动管理工具,启动不起来,自动退出了,没有任何反应. 解决该问题方案: 找到Microsoft.VisualStudio.S ...

  5. python 安装时,为何pip install不是内部或者外部命令错误解决办法

    新安装的python 环境,第一次pip  install 却报不是内部或者外部命令错误 首先检查一下环境变量,可能时你没有设置环境变量 再说一遍,安装python环境时,记得出了python.exe ...

  6. Python两个内置函数locals 和globals

    这两个函数主要提供,基于字典的访问局部和全局变量的方式.在理解这两个函数时,首先来理解一下python中的名字空间概念.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个字典,它的键 ...

  7. dedecms body 输出自动替换结果。

    {dede:field.body function='str_replace("张三","李四",@me)'/} body内容中的张三全部换成了李四

  8. CentOS MySql5.6编译安装

    生产环境中,mysql服务器上边最好什么服务都不要再安装!!! 一.准备工作: # yum -y install make gcc-c++ cmake bison-devel ncurses-deve ...

  9. Ubuntu中用bitbake core-image-minimal时,出错:from bb import data

    问题描述: 在准备ARM交叉编译环境时,执行完命令: DISTRO=fsl-imx-x11 MACHINE=imx6qsabresd source fsl-setup-release.sh -b bu ...

  10. 基于nginx与Tomcat实现负载均衡

    server1:192.168.200.113(nginx服务端) server2:192.168.200.111(Tomcat服务端) server1中nginx的配置文件 nginx.conf h ...