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个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
随机推荐
- 《数据库系统概念》4-DDL、集合运算、嵌套子查询
一.DDLa) SQL Data DefinitionSQL的基本数据类型有char(n).varchar(n).int.smallint.numeric(p,d).real,double preci ...
- TCP连接之报文首部
在面试时,会经常被问到TCP报文的一些细节,可以说TCP报文是不少企业用来考察面试者对网络的掌握程度的一道题目. TCP连接作为网络传输的一个环节,是不可或缺的一部分.例如,OSI七层模型的应用层HT ...
- Python鸢尾花分类实现
#coding:utf-8 from sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_s ...
- JDBC数据类型、Java数据类型、标准sql类型
本概述是从<JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference>这本书中摘引来的.JavaSoft ...
- python中的一等对象--函数
一等对象 什么是一等对象: 在运行时创建 能赋值给变量或数据结构中的元素 能作为参数传递给函数 能作为函数的返回结果 python中的字符串,列表什么的都是一等对象,但对如果之前只是使用c++.jav ...
- 关于elk中filebeat定义好日志输出,但是redis里面却没有输出内容的问题
这两天在搞elk的时候,filebeat中指定输出日志至Broker(此处Broker采用redis作为缓存),但是redis中却没有内容,所以就开始排查来 filebeat采用RPM安装的方式来的. ...
- python+mongodb+flask的基本使用
最近在做一个设备管理系统的后端,需要用python结合mongodb来实现,查了一下flask框架是比较合适的,自己摸索了好久一步步慢慢实现基本功能. 在程序开始之前请确保mongodb服务是开启的, ...
- Jenkins 自动发布 Spring Boot 项目(Gitee)
1.下载 wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war,并部署到tomcat下 2.机器安装好 java ,maven ,g ...
- 自己动手写waf指纹识别
import requests import re def target_url(scan_url): xssstring = '<script>alert(1)</script&g ...
- Java实现对zip和rar文件的解压缩
通过java实现对zip和rar文件的解压缩