题目大意:给一张无向图,找一条字典序最小的欧拉路径

题解:若图不连通或有两个以上的奇数点,则没有欧拉路径,可以$dfs$,在回溯时把这个节点加入答案

卡点:没有在回溯时加入答案,导致出现了欧拉路径没走环(少走了一段)

 

C++ Code:

#include <cstdio>
#include <cctype>
#include <algorithm>
#define maxn 60
int m, start = 52, ind[maxn];
int v[maxn], n, ret[256];
bool e[maxn][maxn];
char ans[maxn * maxn];int f[maxn];
int find(int x) {return x == f[x] ? x : (f[x] = find(f[x]));}void dfs(int u) {for (int i = 1; i <= n; i++) if (e[u][i]) {e[u][i] = e[i][u] = false;dfs(i);}ans[m--] = v[u];
}
int main() {scanf("%d", &m);for (int i = 'A'; i <= 'Z'; i++) v[++n] = i, ret[i] = n;for (int i = 'a'; i <= 'z'; i++) v[++n] = i, ret[i] = n;for (int i = 1; i <= n; i++) f[i] = i;for (int i = 0; i < m; i++) {char ch = getchar();while (!isalpha(ch)) ch = getchar();int a = ret[static_cast<int> (ch)], b;ch = getchar();while (!isalpha(ch)) ch = getchar();b = ret[static_cast<int> (ch)];start = std::min(start, std::min(a, b));e[a][b] = e[b][a] = true;ind[a]++, ind[b]++;f[find(a)] = find(b);}int cnt = 0;for (int i = 1; i <= n; i++) if (ind[i] && f[i] == i) cnt++;if (cnt > 1) {puts("No Solution");return 0;}cnt = 0;for (int i = 1; i <= n; i++) if (ind[i] & 1) {if (!cnt) start = i;cnt++;}if (cnt > 2) {puts("No Solution");return 0;}dfs(start);puts(ans);return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10014705.html

[洛谷P1341]无序字母对相关推荐

  1. 洛古--P1341 无序字母对--欧拉路径--Sabrina--Sabrinadol

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

  2. 洛谷 1341 无序字母对

    欧拉路的裸题??? 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #inc ...

  3. luogu P1341 无序字母对(欧拉回路应用、模板)

    整理的算法模板合集: ACM模板 目录 输出n+1个字母,使得n个字母对都在这个字符串中出现,因为是n+1个字母,所以我们可以看出来其实就是一个欧拉路径,因为字母对可以替换顺序,所以我们将每个字母对都 ...

  4. P1341 无序字母对

    题面:https://www.luogu.org/problem/P1341 本题是一个欧拉回路模板题,直接建图跑欧拉回路即可,注意:有环时需回溯后再记录.Code: #include<iost ...

  5. 标题python之单个小写字母转为大写字母(洛谷P5704)

    标题python之单个小写字母转为大写字母(洛谷P5704) 字母转换 展开 题目描述 输入一个小写字母,输出其对应的大写字母.例如输入 q[回车] 时,会输出 Q. 输入格式 无 输出格式 无 in ...

  6. 欧拉回路【洛谷习题】无序字母对

    首先非常痛心疾首地说一句,欧拉回路自己之前只是看过代码,知道思想,从来没有亲手实现过,所以,,,伤亡惨重!!! 欧拉回路是一个非常有意思的图论模型,因为伟大的数学家欧拉(euler)而得名.传说,曾经 ...

  7. 【洛谷1341】无序字母对(欧拉回路)

    点此看题面 大致题意:给你\(n\)个各不相同的无序字母对(注意:两个字母可能相同,被这个坑了好几次),请构造一个长度为\(n+1\)的字符串包含每个字母对. 欧拉回路 这是一道裸的欧拉回路,只不过是 ...

  8. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  9. [洛谷P3181] [HAOI2016]找相同字符

    洛谷题目链接:[HAOI2016]找相同字符 题目描述 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. 输入输出格式 输入 ...

最新文章

  1. [ImportNew]Java中的Timer类和TimerTask类
  2. python常用库 自动化办公类 —— PyPDF2(处理pdf文件)
  3. php 循环curl,PHP实现的curl批量请求操作示例
  4. 循环链表:拉丁方阵问题
  5. linux内核make执行过程
  6. 【跃迁之路】【425天】程序员高效学习方法论探索系列(实验阶段182-2018.04.06)...
  7. java B2B2C 源码 多级分销Springcloud多租户电子商城系统-SpringCloud配置中心内容加密...
  8. Hyperledger Fabric教程(3)-- byfn.sh分析-生成通道所需交易和文件
  9. 关于字符 字节 python3
  10. 【图像隐写】基于matlab GUI DWT+SVD数字水印 【含Matlab源码 939期】
  11. 计算机学stata,stata(统计学软件)
  12. 数学分析教程(科大)——2.8笔记+习题
  13. 做课题与科研项目常用的研究方法
  14. 阿里云新优惠活动,幸运券免费领取
  15. 20211014gfsj_re_refor50plz50
  16. cesium加载BIM模型
  17. 中国IT实验室的java方面的视频
  18. 世界杯主题系列-用Scratch制作足球比赛小游戏,源码分享啦
  19. 设置oracle不使用swap,安装oracle12c swap不足
  20. Bellman Ford算法详解

热门文章

  1. C语言 va_start 宏 - C语言零基础入门教程
  2. jq之mouseenter
  3. linux生成图片快捷方式,在Deepin Linux系统下给AppImage格式软件创建快捷方式的方法...
  4. linux 内核裁剪的具体过程和方法,Linux内核裁剪的具体过程和方法
  5. python3.6里有xhr吗_python – XHR请求URL在尝试解析其内容时不存在
  6. linux setuid函数_setuid函数解析
  7. java mvc数据库 封装_关于SpringMvc参数封装_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...
  8. reducebykeyandwindow java_Spark Streaming笔记整理(三):DS的transformation与output操作
  9. android版本10好不好,一加正式推送Android 10系统 流畅性怎么样
  10. matlab调用python_从MATLAB调用Python函数