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

题意:给定n对字母对,要求构造一个个数为n+1的字符串,使得每一个字母对都在里面出现过。

思路:这种题目都卡了好久,代码能力真的不行了啊。

其实就是每个字母是节点,每个字母对就是这两个字母之间连一条边,每个字母对都要出现就是每条边都要经过一次且只经过一次。

所以就是一个欧拉路的问题。

欧拉路问题很简单,首先如果度数是奇数的点只能是0或2个。

之后就是遍历节点的每一条边,全部dfs结束了之后把这个节点加入栈中就行了。

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<map>
  4. #include<set>
  5. #include<cstring>
  6. #include<algorithm>
  7. #include<vector>
  8. #include<cmath>
  9. #include<stack>
  10. #include<queue>
  11. #include<iostream>
  12.  
  13. #define inf 0x7fffffff
  14. using namespace std;
  15. typedef long long LL;
  16. typedef pair<int, int> pr;
  17.  
  18. int n;
  19. const int maxm = ;
  20. const int maxn = ;
  21. int g[maxn][maxn];
  22. //int head[maxn], to[maxm * 2], nxt[maxm * 2], vis[maxm * 2];
  23. int deg[maxn];
  24. int tot = ;
  25.  
  26. stack<int>ans;
  27.  
  28. void dfs(int now){
  29.  
  30. for(int i = ; i <= ; i++){
  31. if(g[now][i] <= )continue;
  32. g[now][i]--;g[i][now]--;
  33. dfs(i);
  34. }
  35. ans.push(now);
  36. //printf("%c", now);
  37. }
  38.  
  39. int main()
  40. {
  41. scanf("%d", &n);
  42. for(int i = ; i < n; i++){
  43. string s;
  44. cin>>s;
  45. g[s[]][s[]]++;g[s[]][s[]]++;
  46. //cout<<s[0]-'A'<<" "<<s[1]-'A'<<endl;
  47. deg[s[]]++;
  48. deg[s[]]++;
  49. //add(s[0] - 'A', s[1] - 'A');
  50. }
  51.  
  52. //printf("%d\n", deg['I' - 'A']);
  53. int cnt = , dian = ;
  54. for(int i = ; i <= ; i++){
  55. if(deg[i] % ){
  56. cnt++;
  57. if(!dian)dian = i;
  58. }
  59. }
  60. if(!cnt){
  61. for(int i = ; i <= ; i++){
  62. if(deg[i]){
  63. dian = i;
  64. break;
  65. }
  66. }
  67. }
  68.  
  69. if(cnt && cnt != ){
  70. printf("No Solution\n");
  71. }
  72. else{
  73. dfs(dian);
  74. //cout<<ans.size()<<endl;
  75. if(ans.size() >= n+){
  76. while(!ans.empty()){
  77. printf("%c", ans.top());
  78. ans.pop();
  79. }
  80. printf("\n");
  81. }
  82. else{
  83. printf("No Solution\n");
  84. }
  85. }
  86.  
  87. }

洛谷P1341 无序字母对【欧拉路】【dfs】的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. TCP状态转换(图解+文字解说)

    <深入分析 javaweb 技术内幕>P38 读书扩展 作者:淮左白衣 写于2018年4月12日20:58:36 目录 TCP状态转换图解 图解三次握手 文字讲解三次握手: 图解四次挥手 ...

  2. react封装通用tab组件

    import React, { Component } from 'react' import PropTypes from 'prop-types' import _ from 'lodash' i ...

  3. C#基础--Virtual与abstract区别、重写

    Virtual作用:子类可以对父类重写,虚方法是对多态特征体现.代表一类对象的所具有的公共属性或方法. public class Animal { public string Name { get; ...

  4. centos安装mysql(for 小白)

    安装前提: 安装号centos.SecureCRT 安装准备: centos自带数据库Mariadb,先将其移除 下载mysql: 镜像网址:http://mirrors.sohu.com/mysql ...

  5. 搭建nginx静态资源站

    搭建静态资源站包括以下几部分: root指令与alias指令的区别 使用gzip压缩资源 如何访问指定目录下的全部资源文件 如何限制访问流量 如何自定义log日志 root指令与alias指令的区别 ...

  6. 树莓派二:apt-get出错、蓝牙、汉化、输入法

    用apt-get install一个软件的时候出现了一个错误: E: Encountered a section with no Package: header E: Problem with Mer ...

  7. nRF24L01无线介绍

    CE:RX或TX模式选择 CSN:SPI片选信号 SCK:SPI时钟 MOSI:SPI数据输入 MISO:SPI数据输出 IRQ:可屏蔽中断脚 51测试程序 实测可用! #define TX_ADR_ ...

  8. dubbo框架梳理

    Dubbo分层 Dubbo框架运行主要分如下九层: 配置层:config 服务代理层:proxy 注册中心层:registry 路由层:cluster 监控层:monitor 远程调用层:protoc ...

  9. jeffy-vim-v2.9

    http://pan.baidu.com/s/1qW1DlP6

  10. Nginx 优化详解

    一.一般来说nginx 配置文件中对优化比较有作用的为以下几项: 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 (如,2个四核的cpu计 ...