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(欧拉道路)的更多相关文章

  1. Uva 10129 - Play on Words 单词接龙 欧拉道路应用

    跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...

  2. UVa 10129 Play On Words【欧拉道路 并查集 】

    题意:给出n个单词,问这n个单词能否首尾接龙,即能否构成欧拉道路 按照紫书上的思路:用并查集来做,取每一个单词的第一个字母,和最后一个字母进行并查集的操作 但这道题目是欧拉道路(下面摘自http:// ...

  3. UVA 10129 Play on Words(欧拉道路)

    题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...

  4. 【UVa】12118 Inspector's Dilemma(欧拉道路)

    题目 题目     分析 很巧秒的一道题目,对着绿书瞎yy一会. 联一下必须要走的几条边,然后会形成几个联通分量,统计里面度数为奇数的点,最后再减去2再除以2.这样不断相加的和加上e再乘以t就是答案, ...

  5. Nyoj42 一笔画问题 (欧拉道路)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=42题目链接 #include <cstdio> #include <cstring ...

  6. 6-14 Inspector s Dilemma uva12118(欧拉道路)

    题意:给出一个国家城市个数n   所需走过道路个数e   每条道路长t   该国家任意两个城市之间都存在唯一道路长t     要求 :找一条最短的路遍历所有所需走过的路 一开始以为是图的匹配  但是好 ...

  7. POJ 2513 Colored Sticks(欧拉道路+字典树+并查集)

    http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的. 思路: 题目很明 ...

  8. UVA-10129 Play on Words (判断欧拉道路的存在性)

    题目大意:给出一系列单词,当某个单词的首字母和前一个单词的尾字母相同,则这两个单词能链接起来.给出一系列单词,问是否能够连起来. 题目分析:以单词的首尾字母为点,单词为边建立有向图,便是判断图中是否存 ...

  9. UVA10129———欧拉道路

    题目 输入n(n≤100000)个单词,是否可以把所有这些单词排成一个序列,使得每个单词的第一个字母和上一个单词的最后一个字母相同(例如 acm,malform,mouse).每个单词最多包含1000 ...

随机推荐

  1. 基于kbengine 0.4.20

    前言: v0.0.1 2015-04-10 誉小痕(shawhen2012@hotmail.com) v0.0.2 2015-04-12 誉小痕(shawhen2012@hotmail.com) ch ...

  2. 嵌套循环连接(Nested Loops Joins)

    The nested loops join, also called nested iteration, uses one join input as the outer input table(sh ...

  3. scrapy 安装出错 [err2] no such file or directory: 'README.rst'【已解决】

    背景:pip安装一直不成功,很多模块用pip安装都不行,只好到github下载zip安装 c:\Document and settings\> python e:\scrapy-0.24\set ...

  4. CodeForces 738C Road to Cinema

    二分答案. 油量越多,显然通过的时间越少.可以二分找到最小的油量,可以在$t$时间内到达电影院. 一个油箱容量为$v$的车通过长度为$L$的路程需要的最小时间为$max(L,3*L-v)$.计算过程如 ...

  5. 洛谷——P1869 愚蠢的组合数

    P1869 愚蠢的组合数 题目描述 最近老师教了狗狗怎么算组合数,狗狗又想到了一个问题... 狗狗定义C(N,K)表示从N个元素中不重复地选取K个元素的方案数. 狗狗想知道的是C(N,K)的奇偶性. ...

  6. response (响应对象)

    一.response响应过程 在去发送一个请求时, 会找到tomcat引擎 引擎会找到对应的web应用,并且会创建request对象和response对象 找到应用后, 会执行应用的web.xml再去 ...

  7. [BZOJ2726][SDOI2012]任务安排(DP+凸壳二分)

    2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1580  Solved: 466[Submit][Statu ...

  8. AtCoder - 3939 Strange Nim

    Problem Statement Takahashi and Aoki are playing a stone-taking game. Initially, there are N piles o ...

  9. [Arc080F]Prime Flip

    [Arc080F]Prime Flip Description 你有无限多的"给给全",编号为1,2,3,....开始时,第x1,x2,...,xN个"给给全" ...

  10. 【树形dp】Godfather

    [POJ3107]Godfather Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7212   Accepted: 253 ...