Luogu P1341 无序字母对
突然发现我现在很喜欢打图论题。
然而都是很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 无序字母对的更多相关文章
- 洛谷 P1341 无序字母对 解题报告
P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...
- 洛谷P1341 无序字母对(欧拉回路)
P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...
- 洛谷 P1341 无序字母对(欧拉路)
P1341 无序字母对 题目提供者yeszy 标签 福建省历届夏令营 难度 提高+/省选- 最新讨论 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造 ...
- P1341 无序字母对【欧拉路径】- Hierholzer模板
P1341 无序字母对 提交 24.87k 通过 6.80k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 福建 ...
- P1341 无序字母对(欧拉回路)
题目链接: https://www.luogu.org/problemnew/show/P1341 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一 ...
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- 洛谷 P1341 无序字母对 Label:欧拉路 一笔画
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- P1341 无序字母对 欧拉回路
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- P1341 无序字母对
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
随机推荐
- 浅谈Java多线程同步机制之同步块(方法)——synchronized
在多线程访问的时候,同一时刻只能有一个线程能够用 synchronized 修饰的方法或者代码块,解决了资源共享.下面代码示意三个窗口购5张火车票: package com.jikexueyuan.t ...
- 什么是DDoS攻击?DDoS防御的11种方针详解
对于遭受DDOS攻击的情况是让人很尴尬的,如果我们有良好的DDoS防御方法,那么很多问题就将迎刃而解,我们来看看我们有哪些常用的有效地方法来做好DDoS防御呢. 对于DDoS防御的理解: 对付DDOS ...
- 对JS作用域和作用域链的理解
理解好javascript的变量作用域和链式调用机制对用好变量起着关键的作用,下面我来谈谈这两个概念的理解. (1)链式调用机制 作用域链的定义:函数在调用参数时会从函数内部到函数外部逐个”搜索“参数 ...
- Fiddler抓包使用教程-乱码处理 Decode
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/73350344 本文出自[赵彦军的博客] 在 Fiddler 的工具栏中有一个 De ...
- Source Insight里头文件注释和函数头的注释
1.将下述代码拷贝入一个文件,扩展名为em 2.打开BASE工程,添加本文件,并重新同步 3.添加hh_InsertFuncHeader的快捷键,即为函数头注释,光标需要放在函数名那一行,否则无效 4 ...
- Scoop Windows 的命令行安装程序管理工具
传送门: # 官网 http://scoop.sh/ # github https://github.com/lukesampson/scoop window中快速安装: 必须使用powershell ...
- 数据可视化:CSV格式,JSON格式
下载CSV格式数据,进行可视化 csv.reader()创建一个与文件有关联的阅读器(reader)对象,reader处理文件中的第一行数据,并将每一项数据都存储在列表中 head_row = nex ...
- trap命令的实战用法
trap命令: trap命令是专用于捕捉信号的.比如像ctrl+c发送给终端的中断信号等等.在捕捉到信号之后,可以进行一系列的操作. 用法:trap 'COMMAND' INT COMMAND表示t ...
- git merge 步骤
这两天用git比较多,自己学习的过程踩了不少误区,特意记录下来. 当多人合作开发使用git作为代码管理仓库时,要注意自己的更新不能冲掉别人的更新,因为自己一开始不了解的时候就出现了这种情况.首先一定要 ...
- 4.6Python多版本存在问题
返回总目录 目录: 1.展示效果: 2.操作流程: (一)展示效果: 1.多个版本python运行的情况: 2.多个版本pip运行的情况: (二)操作流程: 1.很关键的一条语句: pythonx.x ...