题目链接:

https://www.luogu.org/problemnew/show/P1341

题目描述

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

输入输出格式

输入格式:

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

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

输出格式:

输出满足要求的字符串。

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

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

输入输出样例

输入样例#1: 
4
aZ
tZ
Xt
aX
输出样例#1:
XaZtX

解题思路:

非常有意思的一道题,主要考察欧拉回路和欧拉路径的运用。

1,首先针对题目样例,输出样例不是aXtZa,因为'a'的ascii码是97,'X'的ascii码是88。

2,将每一个字符看做一个孤立的点,利用输入的数据建立无向图,如果图连通并且存在欧拉回路(每个节点的度数均为偶数)或者存在欧拉路径(仅存在两个点的度数是奇数,其余点的度数均为偶数),则满足题目要求,再从头dfs一遍记录结果即可。

欧拉回路:通过所有边一次且仅一次,最终回到出发点的路(每个节点的度数均为偶数)

欧拉路径:通过所有边一次且仅一次,最终不回到出发点的路(仅存在两个点的度数是奇数,其余点的度数均为偶数)

#include <iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
int f[125];
int ed[125][125];
int deg[125];
int ans[1000010];
int n;
//A 65 z 122
int findroot(int x){//并查集判连通
if(x==f[x]) return x;
return f[x]=findroot(f[x]);
}
void dfs(int k){//记录路径
for(int i=65;i<=122;i++){
if(ed[k][i]){
ed[k][i]=ed[i][k]=0;
dfs(i);
}
}
ans[n--]=k;
}
int main(int argc, char** argv) {
scanf("%d",&n);
int m=n;
memset(ed,0,sizeof(ed)); for(int i=65;i<=122;i++) f[i]=i; for(int i=1;i<=n;i++){
string s;cin>>s;
ed[s[0]][s[1]]=ed[s[1]][s[0]]=1;
deg[s[0]]++;deg[s[1]]++; int x=findroot(s[0]),y=findroot(s[1]);
if(x!=y) f[x]=y;
}
int cnt=0;
for(int i=65;i<=122;i++) if(f[i]==i&&deg[i]) cnt++;
if(cnt!=1) {printf("No Solution\n");return 0;}//图不连通,退出 int st=0;
cnt=0;
for(int i=65;i<=122;i++){
if(deg[i]&1){
cnt++;
if(!st) st=i;
}
}
if(cnt>2) {printf("No Solution\n");return 0;}//不满足欧拉路径,退出 if(!st){//不存在欧拉路径,但存在欧拉回路
for(int i=65;i<=122;i++) if(!(deg[i]&1)&&deg[i]) {st=i;break;}
}
dfs(st); for(int i=0;i<=m;i++) printf("%c",ans[i]-65+'A');
return 0;
}

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

  1. P1341 无序字母对 欧拉回路

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

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

    题目传送门 解题思路: 一道欧拉回路的模板题,详细定理见大佬博客,任意门 AC代码: #include<cstdio> #include<iostream> using nam ...

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

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

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

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

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

    P1341 无序字母对 题目提供者yeszy 标签 福建省历届夏令营 难度 提高+/省选- 最新讨论 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造 ...

  6. P1341 无序字母对【欧拉路径】- Hierholzer模板

    P1341 无序字母对 提交 24.87k 通过 6.80k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 福建 ...

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

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

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

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

  9. P1341 无序字母对

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

随机推荐

  1. 【操作系统】页面置换算法(最佳置换算法)(C语言实现)

    [操作系统]页面置换算法(最佳置换算法)(C语言实现) (编码水平较菜,写博客也只是为了个人知识的总结和督促自己学习,如果有错误,希望可以指出) 1.页面置换算法: 在地址映射过程中,若在页面中发现所 ...

  2. react第十五单元(react路由的封装,以及路由数据的提取)

    第十五单元(react路由的封装,以及路由数据的提取) #课程目标 熟悉react路由组件及路由传参,封装路由组件能够处理路由表 对多级路由能够实现封装通用路由传递逻辑,实现多级路由的递归传参 对复杂 ...

  3. [OI笔记]三种逆元的求法

    其实这篇博客只是搬运一下我之前(大概是NOIP那会)写在word里的笔记- 下面直接复制原话,题目是洛谷上求逆元的模板题:https://www.luogu.org/problemnew/show/P ...

  4. numpy和pandas-数据分析模块

    应用:1.数据分析 2.深度学习 3.机器学习 运算速度快:numpy 和 pandas 都是采用 C 语言编写, pandas 又是基于 numpy, 是 numpy 的升级版本. 消耗资源少:采用 ...

  5. 【python爬虫】一个简单的爬取百家号文章的小爬虫

    需求 用"老龄智能"在百度百家号中搜索文章,爬取文章内容和相关信息. 观察网页 红色框框的地方可以选择资讯来源,我这里选择的是百家号,因为百家号聚合了来自多个平台的新闻报道.首先看 ...

  6. 类似818tu.c微信小说分销系统设计之多公众号网页授权自动登录源码分享

    /** 转载请保留原地址以及版权声明,请勿恶意修改 *  作者:杨浩瑞  QQ:1420213383  独立博客:http://www.yxxrui.cn * [后台]http://xiaoshuo. ...

  7. (二)、vim即gvim的炫酷搜索模式与技巧

      一.进入搜索模式 1. 打开文件,狂按  <Esc> 进入normal模式,然后按  /  或者  :/  进入搜索模式,添加上关键字例如world,按回车即搜索world: :/wo ...

  8. 一.C语言概述

    C语言的起源 贝尔实验室的Dennis Ritchie在1972年开发了C,当时他正与ken Thompson一起设计UNIX操作系统,然而,C并不是完全由Ritchie构想出来的.它来自Thomps ...

  9. 使用metadata-extractor获取照片中的位置、曝光度、大小...

    使用metadata-extractor实现获取图片中的属性信息 官网:https://drewnoakes.com/code/exif/ 简介:metadata-extractor允许您通过简单的A ...

  10. Idea创建Maven项目时出现Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.0.1错误

    如果Maven中用的jre用的是idea中自带的,但是环境变量JAVA_HOME配置的是自己的jdk,那么就会出现 解决方法是到settiing中把jre改成自己的jdk中的jre 经过尝试,问题解决