题目描述

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

分析

欧拉回路的模板题。
暴力删边欧拉回路,邻接矩阵实现就可以了。

代码

  1. #include <bits/stdc++.h>
  2. #pragma GCC optimize(2)
  3. #define ll long long
  4. #define ms(a, b) memset(a, b, sizeof(a))
  5. #define inf 0x3f3f3f3f
  6. #define db double
  7. #define N 15000005
  8. using namespace std;
  9. template <typename T>
  10. inline void read(T &x) {
  11. x = 0; T fl = 1; register char ch = 0;
  12. for (; ch < '0' || ch > '9'; ch = getchar())
  13. if (ch == '-') fl = -1;
  14. for (; ch >= '0' && ch <= '9'; ch = getchar())
  15. x = (x << 1) + (x << 3) + (ch ^ 48);
  16. x *= fl;
  17. }
  18. char s[5];
  19. int g[155][155], ind[155], ans[N];
  20. int cnt, tot, n;
  21. void dfs(int u) {
  22. for (int i = 1; i <= 150; i ++) {
  23. if (g[u][i]) {
  24. g[u][i] --; g[i][u] --;
  25. dfs(i);
  26. }
  27. }
  28. ans[++ cnt] = u;
  29. }
  30. int main() {
  31. read(n);
  32. for (int i = 1; i <= n; i ++) {
  33. scanf("%s", s);
  34. g[s[0]][s[1]] ++, g[s[1]][s[0]] ++;
  35. ind[s[0]] ++, ind[s[1]] ++;
  36. }
  37. int rt = -1;
  38. for (int i = 1; i <= 150; i ++) {
  39. if (ind[i] % 2 == 1) {
  40. tot ++;
  41. if (tot == 1) rt = i;
  42. }
  43. }
  44. if (rt == -1) {
  45. for (int i = 1; i <= 150; i ++) {
  46. if (ind[i]) {
  47. rt = i;
  48. break;
  49. }
  50. }
  51. }
  52. if (tot != 0 && tot != 2) {
  53. printf("No Solution\n");
  54. return 0;
  55. }
  56. dfs(rt);
  57. for (int i = cnt; i >= 1; i --) printf("%c", ans[i]);
  58. return 0;
  59. }

[luogu1341]无序字母对【欧拉回路】的更多相关文章

  1. [Luogu1341]无序字母对(欧拉回路)

    按题意给定字符串建无向图,找欧拉回路 按照定义,当没有奇数度点或者只有2个奇数度点时才有欧拉回路 Code #include <cstdio> #include <algorithm ...

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

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

  3. [luogu1341][无序字母对]

    luogu1341 思路 欧拉回路和欧拉路的裸题,首先判断是否存在欧拉路或者欧拉回路.当且仅当途中每个点的度数都为偶数时,存在欧拉回路.当且仅当图中度数为奇数的点的个数为2时,存在欧拉路.如果存在欧拉 ...

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

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

  5. 「LuoguP1341」 无序字母对(欧拉回路

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

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

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

  7. P1341 无序字母对(欧拉回路)

    题目链接: https://www.luogu.org/problemnew/show/P1341 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一 ...

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

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

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

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

随机推荐

  1. rest-framework的权限组件

    权限组件 写在开头: 首先要在models表中添加一个用户类型的字段: class User(models.Model): name=models.CharField(max_length=32) p ...

  2. MySQL数据库性能优化思路与解决方法(一转)

     1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越 小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设 ...

  3. setState的参数接收函数

  4. 5 Expressing future time

    1 英语中表达将来的时间有四种主要方式:be going to, will, 现在进行时,一般现在时. 2 Make a prediction. 若要预测将来, 可以使用 be going to 或者 ...

  5. Day 5-7 exec 和元类的创建.

    exec方法 元类 exec(str_command,globals,locals)参数1:字符串形式的命令参数2:全局作用域(字典形式). 如果不指定,默认globals参数3:局部作用(字典形式) ...

  6. java.lang.NoClassDefFoundError: org/apache/log4j/Priority的问题解决

    在pom 文件中添加 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artif ...

  7. 结巴(jieba)分词

    一.介绍: jieba: “结巴”中文分词:做最好的 Python 中文分词组件 “Jieba” (Chinese for “to stutter”) Chinese text segmentatio ...

  8. 当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体

    最近在做一个WCF程序的时候,WCF程序老是弹出一个错误“当应用程序不是以UserInteractive 模式运行时显示模式对话框或窗体是无效操作.请指定ServiceNotification或Def ...

  9. 使用PHP进行SOCKET编程

    一.SOCKET原理图 二.SOCKET常用函数 1.创建socket函数: resource socket_create ( int $domain , int $type , int $proto ...

  10. Vue.js文档

    参考网址:https://vuefe.cn/ 第一  安装 1.下载到本地后使用<script>标签直接引入 2.使用CDN引入 例如:使用CDN引入 <script src=&qu ...