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

  然而都是很easy的。

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

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

  开始讲思路。

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

  记录与每个点相连的边。

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

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

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

  其他:无解

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

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

  CODE

    uses math;
var
e:array[..*+] of longint;
f:array[..,..] of boolean;
i,j,n,minn,u,v,t,tot:longint;
x,y:char;
ans:array[..*+] of char;
procedure dfs(k:longint);
var i:longint;
begin
for i:= to do
if f[k,i] then
begin f[k,i]:=false; f[i][k]:=false;
dfs(i); end;
inc(tot); ans[tot]:=chr(k+ord('A'));
end;
begin
readln(n); minn:=;
for i:= to n do
begin readln(x,y); u:=ord(x)-ord('A'); v:=ord(y)-ord('A');
minn:=min(minn,min(u,v));
f[u,v]:=true; f[v,u]:=true;
inc(e[u]); inc(e[v]); end;
for i:= to do
if e[i] mod = then inc(t);
if t= then dfs(minn) else
if t= then begin minn:=; for i:= to do if e[i] mod = then minn:=min(minn,i); dfs(minn); end else
begin writeln('No Solution'); halt; end;
for i:=tot downto do write(ans[i]);
end.

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

  CODE

#include<cstdio>
#include<iostream>
using namespace std;
const int N=;
int n,i,e[N],t,tot;
bool f[N][N];
char ans[N];
void dfs(int k)
{
for (int i=;i<=N;++i)
if (f[k][i])
{
f[k][i]=f[i][k]=;
dfs(i);
}
ans[++tot]=k;
}
int main()
{
//freopen("testdata.in","r",stdin); freopen("luogu.out","w",stdout);
scanf("%d",&n); getchar();
for (i=;i<=n;++i)
{
char x=getchar(),y=getchar();
getchar();
f[x][y]=f[y][x]=;
e[x]++; e[y]++;
}
for (i=;i<=N;++i)
if (e[i]%) t++;
if (t==)
{
int x1,x2;
for (i=;i<=N;++i)
if (e[i]%) { x1=i; break; }
for (i+=;i<=N;++i)
if (e[i]%) { x2=i; break; }
dfs(min(x1,x2));
} else if (t==)
{
for (i=;i<=N;++i)
if (e[i]) break;
dfs(i);
} else { puts("No Solution"); return ; }
for (i=tot;i;--i)
printf("%c",ans[i]);
return ;
}

  %%%

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. (网页)Uncaught ReferenceError: pageImport is not defined

    在js开发中,很多人遇到类似问题,都找不到解决方法.Uncaught ReferenceError: $ is not defined,在这里给大家提供几个解决方法. 1.出现这个错误,最可能的是引用 ...

  2. (网页)javascript如何用递归写一个简单的树形结构

    转自博客园: 现在有一个数据,需要你渲染出对应的列表出来: var data = [ {"id":1}, {"id":2}, {"id":3 ...

  3. recovery 恢复出厂设置失败Data wipe failed

    最近客户反馈,编译32位的android系统,在recovery中执行恢复出厂设置的时候失败了,失败的打印提升信息如下. Formatting /data... [ 2.191404] E:get_f ...

  4. python第八天)——购物车作业优化完成

    发现之前的三级菜单代码有BUG现已经修改过来了 购物车程序:启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表允许用户根据商品编号购买商品用户选择商品后,检测余额是否够, ...

  5. python装饰器(新年第一写)

    祭奠碌碌无为的2018,想想其实也不算碌碌无为,至少我还搞懂了装饰器,写了一堆有用没用的玩意 原来觉得装饰器挺难的,直到2018年的最后几天,突然就明白了,难道这就是传说中的开天聪么 言归正传,之所以 ...

  6. 基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二)本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点  FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算法. ...

  7. VS2015 无法启动 IIS Express Web 服务器 解决方案

    VS2015 IIS Express 无法启动Web 解决方案 [亲测已成功] 1.我的电脑—管理—事件查看器—Windows日志—应用程序: 详细信息会提示你:[模块 DLL C:\Program ...

  8. shell脚本之数组

    变量:存储单个元素的内存空间. 数组:存储多个元素的连续的内存空间. 数组名:整个数组只有一个名字: 数组索引:编号从0开始: 数组名[索引]: 引用数组中的某个元素:${ ARRAY_NAME [ ...

  9. 4.2Python数据类型(2)之布尔类型

    返回总目录 目录: 1.布尔类型的概念和分类: 2.布尔类型的本质 3.布尔类型的应用 (一)布尔类型的概念和分类: (1)概念: 布尔类型(bool)就是用于判断真假的数据类型 (2)分类: Pyt ...

  10. 八皇后问题的Python实现和C#实现

    看到八皇后问题的解决思路, 感觉很喜欢. 我用C#实现的版本之前贴在了百度百科上(https://baike.baidu.com/item/%E5%85%AB%E7%9A%87%E5%90%8E%E9 ...