UVA 10441 - Catenyms(欧拉道路)
UVA 10441 - Catenyms
题意:给定一些单词,求拼接起来,字典序最小的,注意这里的字典序为一个个单词比过去,并非一个个字母
思路:欧拉回路。利用并查集判联通,然后欧拉道路判定,最后dfs输出路径
代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std; const int N = 30; vector<string> g[N];
vector<string> ans; int t, n, parent[N];
bool used[N][1005]; int find(int x) {
return parent[x] == x ? x : parent[x] = find(parent[x]);
} int vis[N];
int cnt, tot, ru[N], chu[N]; void init() {
memset(ru, 0, sizeof(ru));
memset(chu, 0, sizeof(chu));
memset(vis, 0, sizeof(vis));
memset(used, 0, sizeof(used));
for (int i = 0; i < 26; i++) {
g[i].clear();
parent[i] = i;
}
cnt = 1; tot = 0;
scanf("%d", &n);
string s;
while (n--) {
cin >> s;
int u = s[0] - 'a', v = s[s.length() - 1] - 'a';
if (!vis[u]) {vis[u] = 1; tot++;}
if (!vis[v]) {vis[v] = 1; tot++;}
ru[v]++; chu[u]++;
g[u].push_back(s);
int pu = find(u);
int pv = find(v);
if (pu != pv) {
parent[pu] = pv;
cnt++;
}
}
for (int i = 0; i < 26; i++)
sort(g[i].begin(), g[i].end());
} void dfs(int u) {
for (int i = 0; i < g[u].size(); i++) {
int v = g[u][i][g[u][i].length() - 1] - 'a';
if (used[u][i]) continue;
used[u][i] = 1;
dfs(v);
ans.push_back(g[u][i]);
}
} bool solve() {
if (cnt != tot) return false;
int Min = 30;
int odd = 0, st;
for (int i = 0; i < 26; i++) {
if (g[i].size()) Min = min(Min, i);
if (ru[i] - chu[i] == -1) {
odd++;
st = i;
}
else if (chu[i] - ru[i] == -1)
odd++;
else if (chu[i] != ru[i]) return false;
if (odd > 2) return false;
}
ans.clear();
if (!odd) dfs(Min);
else dfs(st);
for (int i = ans.size() - 1; i > 0; i--)
cout << ans[i] << ".";
cout << ans[0] << endl;
return true;
} int main() {
scanf("%d", &t);
while (t--) {
init();
if (!solve()) printf("***\n");
}
return 0;
}
UVA 10441 - Catenyms(欧拉道路)的更多相关文章
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- UVa 10129 Play On Words【欧拉道路 并查集 】
题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...
- UVA 10129 Play on Words(欧拉道路)
题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...
- 【UVa】12118 Inspector's Dilemma(欧拉道路)
题目 题目 分析 很巧秒的一道题目,对着绿书瞎yy一会. 联一下必须要走的几条边,然后会形成几个联通分量,统计里面度数为奇数的点,最后再减去2再除以2.这样不断相加的和加上e再乘以t就是答案, ...
- Nyoj42 一笔画问题 (欧拉道路)
http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目链接 #include <cstdio> #include <cstring ...
- 6-14 Inspector s Dilemma uva12118(欧拉道路)
题意:给出一个国家城市个数n 所需走过道路个数e 每条道路长t 该国家任意两个城市之间都存在唯一道路长t 要求 :找一条最短的路遍历所有所需走过的路 一开始以为是图的匹配 但是好 ...
- POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)
http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...
- UVA-10129 Play on Words (判断欧拉道路的存在性)
题目大意:给出一系列单词,当某个单词的首字母和前一个单词的尾字母相同,则这两个单词能链接起来.给出一系列单词,问是否能够连起来. 题目分析:以单词的首尾字母为点,单词为边建立有向图,便是判断图中是否存 ...
- UVA10129———欧拉道路
题目 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如 acm,malform,mouse).每个单词最多包含1000 ...
随机推荐
- sql 时间日期格式化
sql server2000中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-0 ...
- NestedScrollView
参考文章: Android滑动到顶部悬停 NestedScrollView的使用 效果图: 实现步骤: 将需要悬浮的layout放到CollapsingToolbarLayout之外,AppBarLa ...
- asp.net mvc 中使用NPOI导出excel
版本信息:NPOI1.2.5(2.0以上的版本很多方法不清楚) 明确三点: path: mvc 部署网站的时候,我们肯定要拷贝的一个文件夹就mvc的UI层,有点可以肯定的是,你部署网站的路径不一定都是 ...
- php过滤表单输入的emoji表情
1.过滤emoji表情的原因 在我们的项目开发中,emoji表情是个麻烦的东西,即使我们可以能存储,也不一定能完美显示,因为它的更新速度很快:在iOS以外的平台上,例如PC或者android.如果你需 ...
- 第7天-javascript内置对象
数组相关方法 concat 用来连接多个数组 <script> var a = [1,2,3]; var b = [3,4,5]; var c = a.concat(b); console ...
- Flask实战第54天:cms删除轮播图功能完成
后台逻辑 编辑cms.views.py @bp.route('/dbanner/',methods=['POST']) @login_required def dbanner(): banner_id ...
- 下载好的AE模板怎么用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 下载好的AE模板怎么用_百度经验
- vm克隆linux系统 后连接网络
第一步 vi /etc/udev/rules.d/70-persistent-net.rules 将之前的eth0注释掉, 将eth1改为eth0 并复制mac地址 第二部 vi /et ...
- UNIX域套接字连接mysql
用户可以在配置文件中指定套接字文件的路径,如--socket=/data/mysql/mysql.sock [root@localhost ~]# mysql -uroot -p123456 -S / ...
- [漏洞检测]Proxpy Web Scan设计与实现(未完待续)
Proxpy Web Scan设计与实现 1.简介: Proxpy Web Scan是基于开源的python漏洞扫描框架wapiti改造的web漏洞扫描器,其主要解决以下几个问题而生 ...