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个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
随机推荐
- 云卡门禁安卓SDK_BLEDOOR_SDK_ANDROID_2016_12_15
package com.bosk.bledoor.sdk; //sdk包的开门服务类,AndroidManifest.xml 必须注册 //<service //android:name=&qu ...
- Android事件总线(一)EventBus3.0用法全解析
前言 EventBus是一款针对Android优化的发布/订阅事件总线.简化了应用程序内各组件间.组件与后台线程间的通信.优点是开销小,代码更优雅,以及将发送者和接收者解耦.如果Activity和Ac ...
- (网页)javaScript增删改查(转)
转自CSDN: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...
- recovery 升级'@/cache/recovery/block.map' failed错误问题
随着android版本升级,升级包越来越大,当升级包无法存储在cache分区的时候,会把升级包下载到data分区,然后从data分区升级,最近从data分区加载升级包升级的时候,遇到了如下错误: [ ...
- Appium学习——安装Android SDK
.下载Android SDK 下载地址:http://tools.android-studio.org/index.php/sdk 百度搜索Android SDK也可以. 下载之后,Android S ...
- android ninja【转】
Android7.0 Ninja编译原理 引言 使在Android N的系统上,初次使用了Ninja的编译系统.对于Ninja,最初的印象是用在了Chromium open source code的编 ...
- win7系统保护配置现错误“文件名、目录名或卷标语法不正确。(0x8007007B)
windows7下系统保护功能很是鸡肋,有事会出现一下两个问题: 1.出现错误“文件名.目录名或卷标语法不正确.(0x8007007B) 2.保护设置列表中出现“Windows7_os(c:)(找不到 ...
- 【PAT】B1039 到底买不买(20)(20 分)
/* 琢磨了很久,当时还没做几道题,参考了柳婼的思路 */ #include<stdio.h> #include<string.h> char arr[1000]={'\0'} ...
- spark-Scala
一.spark的特点 1.快速的 2.容易使用的 3.通用的 4.开放的 二.spark组件 sparkCore sparkSQL sparkStreaming MLibmachielearning ...
- 二: python基础数据类型(int,
一.什么是数据类型?2018-12-20 20:57:3õ # (3) num = 0 while num < 10: num += 1 if num == 7: num += 1 # 7执 ...