洛谷 P1341 无序字母对(欧拉路)
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 无序字母对(欧拉路)的更多相关文章
- 洛谷 P1341 无序字母对 解题报告
P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...
- 洛谷P1341 无序字母对(欧拉回路)
P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- 洛谷 P1341 无序字母对 Label:欧拉路 一笔画
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- 洛谷P1341 无序字母对【欧拉路】【dfs】
题目:https://www.luogu.org/problemnew/show/P1341 题意:给定n对字母对,要求构造一个个数为n+1的字符串,使得每一个字母对都在里面出现过. 思路:这种题目都 ...
- P1341 无序字母对[欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 解析 毒瘤字符串读入 我就是不喜欢邻接 ...
- 洛谷 [P1341]无序字母对
这道题第一眼以为是一道字符串的题,但细想一下是一道求欧拉路的图论题. 把每一对对应关系看成一条边,本题即求这张图上是否存在一个欧拉回路或欧拉路,并要求字典序最小的方案,那么我们在dfs的时候就要从该点 ...
- [洛谷P1341]无序字母对
题目大意:给一张无向图,找一条字典序最小的欧拉路径 题解:若图不连通或有两个以上的奇数点,则没有欧拉路径,可以$dfs$,在回溯时把这个节点加入答案 卡点:没有在回溯时加入答案,导致出现了欧拉路径没走 ...
- 洛谷 P1341 无序字母对(欧拉回路)
题目: 解题思路: 我好菜啊!! 首先可以n2搞定,而对于每个点,又可以在当前不优的状态下将不好的状态拼到后面. 最后回溯搞定. 代码: #include<cstdio> #include ...
随机推荐
- python基础知识0-3
一.根据用户输入内容输出其权限 # 根据用户输入内容打印其权限 # FYT --> 超级管理员 # eric --> 普通管理员 # tony,rain --> 业务主管 # ...
- [POI2012]ROZ-Fibonacci Representation (贪心)
大意: 给定数$n$, 求将$n$划分为最少的斐波那契数的和或差. 每次取相邻$n$的斐波那契数一定最优, 考虑证明. 结论1:存在一个最优解,使得每个斐波那契数使用不超过1次.(考虑$2F_n=F_ ...
- Java函数式接口
函数式接口定义且只定义了一个抽象方法.函数式接口的抽象方法的签名称为函数描述符.Java 8的java.util.function包中引入了几个新的函数式接口. 1.Predicate java.ut ...
- 序列化和反序列化在浏览器和 Web 服务器之间传递的数据、加密解密
js中数组不能传递到后台,需进行json序列化: var data = new Array(); data.push({para1:name,para2:answer}); string data = ...
- vue入门:(模板语法与指令)
vuejs使用及HTML的模板语法,可以实现声明式将DOM绑定至底层VUE实例的数据.通过模板语法将数据渲染进DOM的系统,结合响应系统,在应用状态改变时,Vue能够计算出重新渲染组件的最小代价并应用 ...
- JSR-303
JSR-303是java标准的验证框架,已有的实现由 Hibernate validator 定义的注解验证bean属性: 空检查 @Null 验证对象是否为空 @NotNull 验证对象不为空 @N ...
- Docker 备忘
C/S架构: 客户端发出命令给服务器端(内含守护进程),守护进程执行命令后将结果传回给客户端.(可以远程访问,可以本地访问) 容器内部操作: 可写层下面都是只读的,操作时需要什么文件会被复制到可写层, ...
- ConfigurableApplicationContext
转自:https://blog.csdn.net/weixin_39165515/article/details/77169231 此接口结合了所有ApplicationContext需要实现的接口. ...
- yii2-cache组件第三个参数Dependency $dependency的作用浅析
用法如下: $cache->set($key, $result, Configs::instance()->cacheDuration, new TagDependency([ 'tags ...
- Springboot 测试类没有找到bean注入
其他乱七八糟配置就不扯了,先上项目结构图 配置好参数后我再src/test/java类测试访问数据库时发现bean没有正确的注入.值得注意的是,这个项目的启动类是叫App.java 所以我们必须在这个 ...