Luogu 1341 无序字母对 - 欧拉路径
Solution
找一条字典序最小的欧拉路径。
用 $multiset$ 存储领接表。
Code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std; const int N = 1e3 + ; int n, up = 'z' - 'A' + ;
int ans[N], tot, d[N], num; multiset<int> to[N]; void dfs(int u) {
multiset<int> :: iterator i;
for (i = to[u].begin(); i != to[u].end(); i = to[u].begin()) {
int nt = *i;
to[nt].erase(to[nt].find(u));
to[u].erase(to[u].find(nt));
dfs(nt);
}
ans[++tot] = u;
} int main()
{
scanf("%d", &n);
for (int i = ; i <= n; ++i) {
char s[];
scanf("%s", s);
to[s[] - 'A' + ].insert(s[] - 'A' + );
to[s[] - 'A' + ].insert(s[] - 'A' + );
d[s[] - 'A' + ]++;
d[s[] - 'A' + ]++;
}
for (int i = ; i <= up; ++i)
if (d[i] & )
num++;
if (num == || num > )
return puts("No Solution"), ;
if (num == ) {
for (int i = ; i <= up; ++i)
if (d[i]) {dfs(i); break;}
}
else
for (int i = ; i <= up; ++i)
if (d[i] && (d[i] & )) {dfs(i); break;}
for (int i = tot; i; i--)
putchar(ans[i] + 'A' - );
puts("");
}
Luogu 1341 无序字母对 - 欧拉路径的更多相关文章
- Luogu P1341 无序字母对
突然发现我现在很喜欢打图论题. 然而都是很easy的. 这道题很坑,用C++打了一遍莫名Too many or too few lines. 然后我打出了我的独门绝技Pascal.这可能是我最后一次用 ...
- P1341 无序字母对【欧拉路径】- Hierholzer模板
P1341 无序字母对 提交 24.87k 通过 6.80k 时间限制 1.00s 内存限制 125.00MB 题目提供者yeszy 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 福建 ...
- P1341 无序字母对(欧拉回路)
题目链接: https://www.luogu.org/problemnew/show/P1341 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一 ...
- 洛谷 P1341 无序字母对 Label:欧拉路 一笔画
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- 无序字母对 character
无序字母对 character 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入 ...
- 「LuoguP1341」 无序字母对(欧拉回路
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
- 洛谷P1341 无序字母对(欧拉回路)
P1341 无序字母对 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 ...
- 【u016】无序字母对
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个 ...
- 洛谷P1341 无序字母对[无向图欧拉路]
题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒).请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现. 输入输出格式 输入格式: 第一行输入一 ...
随机推荐
- js高级-变量内存分析
var a = 9, b, c={age:9}, d; b = a; b = 19; console.log(a) console.log(b) d = c; d.age = 22; console ...
- c#批量更新list对象sql
注意: 1.语句中"set "后有空格, 2.最后一个if一定有值,且接连的sql字段 无 逗号 3.parameterList.Clear(); /// <summary ...
- 如何添加Modeling 菜单
创建page 在protal settings的cdoform中add new item 在modeing中就可以使用该对象对应的维护页面了.
- JVisual 相关help参数
The launcher has determined that the parent process has a console and will reuse it for its own cons ...
- java面试题:分布式
分布式分为分布式缓存(Redis).分布式锁(Redis或Zookeeper).分布式服务(Dubbo或SpringCloud).分布式服务协调(Zookeeper).分布式消息队列(Kafka.Ra ...
- Redis备份及回收策略
Redis备份(持久化) Redis备份存在两种方式: 1.一种是"RDB".是快照(snapshotting),它是备份当前瞬间Redis在内存中的数据记录; 2.另一种是&qu ...
- JavaScript 中this的实现原理
学懂 JavaScript 言语,一个标志就是了解下面两种写法,或许有不一样的成果. <blockquote "=""> var obj = { foo: f ...
- Django 之多对多关系
1. 多对多关系 作者 <--> 书籍 1. 表结构设计 1. SQL版 -- 创建作者表 create table author( id int primary key auto_inc ...
- DialogFragment 对话框 碎片
package com.example.m_evolution; import android.app.Dialog; import android.app.DialogFragment; impor ...
- centos下安装&&配置redis
一.Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多 ...