突然发现我现在很喜欢打图论题。

  然而都是很easy的。

  这道题很坑,用C++打了一遍莫名Too many or too few lines。

  然后我打出了我的独门绝技Pascal。这可能是我最后一次用Pascal了。

  开始讲思路。

  首先每两点必须相连但无关方向,然后我们发现,可以跑一遍哈密顿回路来搞出答案。

  记录与每个点相连的边。

  统计一下向连边为奇数的点的个数。

  0个:找一个字典序最小的点dfs

  2:个:在两个奇点里找一个字典序最小的dfs

  其他:无解

  dfs时尽量选字典序小的,贪心即可

  由于范围小就用邻接矩阵来存了(f[i,j]表示i,j有边相连,e[i]为i点的相连边数)

  CODE

  1. uses math;
  2. var
  3. e:array[..*+] of longint;
  4. f:array[..,..] of boolean;
  5. i,j,n,minn,u,v,t,tot:longint;
  6. x,y:char;
  7. ans:array[..*+] of char;
  8. procedure dfs(k:longint);
  9. var i:longint;
  10. begin
  11. for i:= to do
  12. if f[k,i] then
  13. begin f[k,i]:=false; f[i][k]:=false;
  14. dfs(i); end;
  15. inc(tot); ans[tot]:=chr(k+ord('A'));
  16. end;
  17. begin
  18. readln(n); minn:=;
  19. for i:= to n do
  20. begin readln(x,y); u:=ord(x)-ord('A'); v:=ord(y)-ord('A');
  21. minn:=min(minn,min(u,v));
  22. f[u,v]:=true; f[v,u]:=true;
  23. inc(e[u]); inc(e[v]); end;
  24. for i:= to do
  25. if e[i] mod = then inc(t);
  26. if t= then dfs(minn) else
  27. if t= then begin minn:=; for i:= to do if e[i] mod = then minn:=min(minn,i); dfs(minn); end else
  28. begin writeln('No Solution'); halt; end;
  29. for i:=tot downto do write(ans[i]);
  30. end.

  发一把C++的,只有10分被狗了(应该是输入输出的问题)。

  CODE

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. const int N=;
  5. int n,i,e[N],t,tot;
  6. bool f[N][N];
  7. char ans[N];
  8. void dfs(int k)
  9. {
  10. for (int i=;i<=N;++i)
  11. if (f[k][i])
  12. {
  13. f[k][i]=f[i][k]=;
  14. dfs(i);
  15. }
  16. ans[++tot]=k;
  17. }
  18. int main()
  19. {
  20. //freopen("testdata.in","r",stdin); freopen("luogu.out","w",stdout);
  21. scanf("%d",&n); getchar();
  22. for (i=;i<=n;++i)
  23. {
  24. char x=getchar(),y=getchar();
  25. getchar();
  26. f[x][y]=f[y][x]=;
  27. e[x]++; e[y]++;
  28. }
  29. for (i=;i<=N;++i)
  30. if (e[i]%) t++;
  31. if (t==)
  32. {
  33. int x1,x2;
  34. for (i=;i<=N;++i)
  35. if (e[i]%) { x1=i; break; }
  36. for (i+=;i<=N;++i)
  37. if (e[i]%) { x2=i; break; }
  38. dfs(min(x1,x2));
  39. } else if (t==)
  40. {
  41. for (i=;i<=N;++i)
  42. if (e[i]) break;
  43. dfs(i);
  44. } else { puts("No Solution"); return ; }
  45. for (i=tot;i;--i)
  46. printf("%c",ans[i]);
  47. return ;
  48. }

  %%%

Luogu P1341 无序字母对的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. P1341 无序字母对

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

随机推荐

  1. 网络基础 http 会话(session)详解

    http 会话(session)详解 by:授客 QQ:1033553122 会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制 一. ...

  2. mybatis学习系列五--插件及类型处理器

    2 插件编写(80-81) 单个插件编写 2.1实现interceptor接口(ibatis) invocation.proceed()方法执行必须要有,否则不会无法实现拦截作用 2.2 使用@int ...

  3. C++ 获取当前正在执行的函数的相关信息

    (我的运行环境:win10x64+vs2015通过, 有的环境KUbuntu 8.04.1 x64 g++ 4.2.3也通过了)主要通过宏来实现:(注意,开头和结尾都是两个下划线) 1. __PRET ...

  4. JMeter—后置处理器(十)

    参考<全栈性能测试修炼宝典JMeter实战>第六章 JMeter 元件详解中第五节后置处理器后置处理器是用来处理采样器发送的请求后得到的响应数据 一.Debug PostProcessor ...

  5. 洗礼灵魂,修炼python(26)--编程核心之“递归”

    递归 1.什么是递归: 其实前面都提过,但没有详细讲.多次调用自身就叫递归 看图,这种就叫递归 看过盗梦空间没?其实也是递归 2.递归需要满足条件: 有调用函数自身 有一个正确的返回条件来结束 在使用 ...

  6. bootstrap-select插件 多选框

    HeBeiTianQi.jsp页面 1 <!--bootstrap-select .css引用--> 2 <link rel="stylesheet" href= ...

  7. ALSA声卡驱动的DAPM(一)-DPAM详解

    最近使用tinymix 调试相应的音频通道,但是一直不知道音频通道的原理是什么.所以百度了一下,百度结果是与DPAM有关. 一.DAPM简介: DAPM是Dynamic Audio Power Man ...

  8. oracle order by 排序

    Syntax ORDER BY { column-Name | ColumnPosition | Expression } [ ASC | DESC ] [ NULLS FIRST | NULLS L ...

  9. SQL 加载

    首先新建表 第一张表 order_info 第二张表 user_info 登录mysql mysql -u root -p 在开始加载数据之前配置编码 查看默认编码 show variables li ...

  10. QT 13 窗口屏幕设置大小与居中显示

    <pre name="code" class="cpp">#include "mainwindow.h" #include &l ...