P1341 无序字母对

题目提供者yeszy

标签 福建省历届夏令营

难度 提高+/省选-

最新讨论

题目描述

给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。

输入输出格式

输入格式:

第一行输入一个正整数n。

以下n行每行两个字母,表示这两个字母需要相邻。

输出格式:

输出满足要求的字符串。

如果没有满足要求的字符串,请输出“No Solution”。

如果有多种方案,请输出前面的字母的ASCII编码尽可能小的(字典序最小)的方案

输入输出样例

输入样例#1:

4

aZ

tZ

Xt

aX

输出样例#1:

XaZtX

说明

【数据规模与约定】

不同的无序字母对个数有限,n的规模可以通过计算得到。

/*
欧拉路.
n的规模应该是A(26,2)=26*25=650.
这题主要是要建模能想到欧拉路.
因为要求字典序最小.
so 找奇点的时候找字典序最小的.
(因为保证第一个最小就保证了字典序最小)
然后[1,52] 有52个字母循环.
天然的循环顺序保证了字典序最小hhh.
一开始还是用性质判有没有解.
然后dfs跑欧拉路记录路径就ok了.
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 1001
#define MAXM 61
using namespace std;
int in[MAXM],out[MAXM],tot,n,g[MAXM][MAXM],d[MAXN],s1=1e4,s2=1e4,ans[MAXN];
char s[3];
bool b[MAXM],flag;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
void dfs(int u,int t)
{
ans[t]=u;
if(t==n+1)
{
flag=true;return ;
}
b[u]=true;
for(int i=1;i<=52;i++)
{
if(g[u][i])
{
g[u][i]=g[i][u]=false;
dfs(i,t+1);
if(flag) return ;
g[u][i]=g[i][u]=true;
}
}
return ;
}
int Get(char ch)
{
return ch>='a'&&ch<='z'?ch-70:ch-64;
}
char Go(int ch)
{
return ch>=1&&ch<=26?ch+64:ch+70;
}
int main()
{
int l,x,y;
n=read();
for(int i=1;i<=n;i++)
{
cin>>s;l=strlen(s);x=Get(s[0]),y=Get(s[1]);
out[x]++,in[y]++;;
g[x][y]=true;g[y][x]=true,d[x]++,d[y]++;
}
for(int i=1;i<=52;i++)
if(d[i]&1) tot++;
if(tot>2)
{
printf("No Solution");
return 0;
}
for(int i=1;i<=52;i++)
if(d[i]&1) {s1=i;break;}
if(s1!=1e4) dfs(s1,1);
else
{
for(int i=1;i<=52;i++)
if(d[i]) {s1=i;break;}
dfs(s1,1);
}
for(int i=1;i<=n+1;i++) printf("%c",Go(ans[i]));
return 0;
}

洛谷 P1341 无序字母对(欧拉路)的更多相关文章

  1. 洛谷 P1341 无序字母对 解题报告

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

  2. 洛谷P1341 无序字母对(欧拉回路)

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

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

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

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

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

  5. 洛谷P1341 无序字母对【欧拉路】【dfs】

    题目:https://www.luogu.org/problemnew/show/P1341 题意:给定n对字母对,要求构造一个个数为n+1的字符串,使得每一个字母对都在里面出现过. 思路:这种题目都 ...

  6. P1341 无序字母对[欧拉路]

    题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 解析 毒瘤字符串读入 我就是不喜欢邻接 ...

  7. 洛谷 [P1341]无序字母对

    这道题第一眼以为是一道字符串的题,但细想一下是一道求欧拉路的图论题. 把每一对对应关系看成一条边,本题即求这张图上是否存在一个欧拉回路或欧拉路,并要求字典序最小的方案,那么我们在dfs的时候就要从该点 ...

  8. [洛谷P1341]无序字母对

    题目大意:给一张无向图,找一条字典序最小的欧拉路径 题解:若图不连通或有两个以上的奇数点,则没有欧拉路径,可以$dfs$,在回溯时把这个节点加入答案 卡点:没有在回溯时加入答案,导致出现了欧拉路径没走 ...

  9. 洛谷 P1341 无序字母对(欧拉回路)

    题目: 解题思路: 我好菜啊!! 首先可以n2搞定,而对于每个点,又可以在当前不优的状态下将不好的状态拼到后面. 最后回溯搞定. 代码: #include<cstdio> #include ...

随机推荐

  1. (三)创建基于maven的javaFX+springboot项目创建

    创建基于maven的javaFx+springboot项目有两种方式,第一种为通过非编码的方式来设计UI集成springboot:第二种为分离用户界面(UI)和后端逻辑集成springboot,其中用 ...

  2. C++:函数先声明后实现

    贼神奇的是,直到昨天在写flex规则的时候我才知道C++中的函数要么在使用之前先定义,要么将实现放在调用之前,不允许先调用后实现.之前一年多竟然不知道这件事,汗````,当然也是可能这件事本身和我思考 ...

  3. python WordCloud 实现词云

    简单示例 from matplotlib import pyplot as plt from wordcloud import WordCloud filename = "text.txt& ...

  4. 2.Struts2-Action

    struts.xml文件中 action 标签中几个属性的作用 1.name:为action命名,输入url访问时,需要带上action的name,通过name知道访问哪个action(通过class ...

  5. JavaWeb【Servlet】

    概念 Servlet是在服务器上运行的小程序.一个Servlet请求对应一个Java类(对应一个Wrapper容器),可以通过请求-响应模式访问这个驻留在内存中的小程序. Tomcat容器等级 上图表 ...

  6. JavaWeb【七、JSP状态管理】

    http协议无状态性 当提交请求,服务器返回响应.但当同一用户同一浏览器再次提交请求,服务器并不知道与刚才的请求是同一用户浏览器发起. 保存用户状态的两大机制 Session-保存在服务器端 Cook ...

  7. Web开发的分层结构与MVC模式

    1.分层结构 所谓分层结构.把不同的功能代码封装成类,把相同功能的类封装在一个个的包中,也叫层.功能归类如下: 实体类: 封装数据,是数据的载体,在层与层之间进行传递,数据也就传递了.比如说要传递学生 ...

  8. 【异常】postman能够请求成功获取到参数,前端请求的却请求不到

    1 前端联调的时候,反馈自己的参数没有生效,无论传递任何参数都是一样的结果 盯了一下日志发现 postman请求的是   :{"getParameter":{"provi ...

  9. from表单中 action的后面"" 内如果是 servlet的虚拟路径的话

    <form action="login" method="post"> ====================================== ...

  10. JLINK驱动版本更换

    https://www.segger.com/downloads/jlink/JLink_Windows_V644b.exe 官网版本 Jlink的版本目录C:\Keil_v5\ARM\Segger\ ...