Catenyms POJ - 2337(单词+字典序输出路径)
题意:
就是给出几个单词 看能否组成欧拉回路或路径 当然还是让输出组成的最小字典序的路
解析:
还是把首尾字母看成点 把单词看成边 记录边就好了
这题让我对fleury输出最小字典序又加深了一些认识
fleury输出最小字典序 就必须保证对应输出的边或点 按从小到大的顺序去走
所以我们先保存 然后排序 然后从大到小加边
因为我们用的是邻接表 邻接表是从当前起点u的最后一个加入的边 开始的 。。所以我们要对应起来
把边从大到小依次加入
#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <cctype>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#include <bitset>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define rd(a) scanf("%d", &a)
#define rlld(a) scanf("%lld", &a)
#define rc(a) scanf("%c", &a)
#define rs(a) scanf("%s", a)
#define pd(a) printf("%d\n", a);
#define plld(a) printf("%lld\n", a);
#define pc(a) printf("%c\n", a);
#define ps(a) printf("%s\n", a);
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff, LL_INF = 0x7fffffffffffffff;
int in[maxn], out[maxn], f[maxn];
int n, s, cnt, tot;
int head[maxn], stk[maxn], vis[maxn];
string str[maxn];
struct node
{
int u, v, next, flag, id;
}Node[maxn]; void add(int u, int v, int id)
{
Node[cnt].u = u;
Node[cnt].v = v;
Node[cnt].id = id;
Node[cnt].flag = ;
Node[cnt].next = head[u];
head[u] = cnt++;
} void dfs(int u)
{
for(int i = head[u]; i != -; i = Node[i].next)
{
if(!Node[i].flag)
{
Node[i].flag = ;
dfs(Node[i].v);
stk[tot++] = Node[i].id;
}
} } void print()
{
int sh = ;
for(int i = tot - ; i >= ; i--)
{
if(sh++) printf(".");
cout << str[stk[i]];
}
printf("\n");
} int find(int x)
{
return f[x] == x ? x : (f[x] = find(f[x]));
} void init()
{
mem(in, );
mem(out, );
mem(vis, );
mem(head, -);
cnt = tot = ;
for(int i = ; i < maxn; i++) f[i] = i;
} int main()
{
int T;
rd(T);
while(T--)
{
init();
rd(n);
for(int i = ; i <= n; i++)
cin >> str[i];
sort(str + , str + n + );
for(int i = n; i >= ; i--)
{
int u = str[i][] - 'a' + ; int v = str[i][str[i].size() - ] - 'a' + ;
vis[u] = vis[v] = ;
add(u, v, i);
in[v]++, out[u]++;
int l = find(u), r = find(v);
if(l != r) f[l] = r;
}
int cnt1 = , cnt2 = , cnt3 = , flag = ;
int x = find(str[][] - 'a' + );
s = str[][] - 'a' + ;
for(int i = ; i <= ; i++)
{
if(!vis[i]) continue;
if(find(i) != x) flag = ;
if(in[i] != out[i]) cnt3++;
if(in[i] + == out[i]) cnt1++, s = i;
if(out[i] + == in[i]) cnt2++;
}
if(!flag && (cnt3 == || cnt3 == && cnt1 == && cnt2 == ))
{
dfs(s);
print();
}
else
printf("***\n"); } return ;
}
Catenyms POJ - 2337(单词+字典序输出路径)的更多相关文章
- hdu Minimum Transport Cost(按字典序输出路径)
http://acm.hdu.edu.cn/showproblem.php? pid=1385 求最短路.要求输出字典序最小的路径. spfa:拿一个pre[]记录前驱,不同的是在松弛的时候.要考虑和 ...
- POJ 2337 【字典序】【欧拉回路】
题意: 给你一些单词,判断这些单词能否在保证首尾单词相同的情况下连成一排. 如果有多组解,输出字典序最小的一组解. 这题... WA了两天. 错误有以下: 1.没有初始化好起始位置,默认起始位置是a了 ...
- 迷宫问题 POJ - 3984 (搜索输出路径)
题目大意 题目不需要大意,poj居然还有中文题 鸣谢 特别鸣谢ljc大佬提供的方法!!! 解法 我们可能输出个最短路径的长度比较简单,但是输出最短路径真的是没有做过,这里有一种简单的方法 因为我们的d ...
- Day 4 -E - Catenyms POJ - 2337
A catenym is a pair of words separated by a period such that the last letter of the first word is th ...
- poj 3414 Pots(bfs+输出路径)
Description You are given two pots, having the volume of A and B liters respectively. The following ...
- HD1385Minimum Transport Cost(Floyd + 输出路径)
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O ...
- POJ 2337 Catenyms(欧拉回(通)路:路径输出+最小字典序)
题目链接:http://poj.org/problem?id=2337 题目大意:给你n个字符串,只有字符串首和尾相同才能连接起来.请你以最小字典序输出连接好的单词. 解题思路:跟POJ1386一个意 ...
- POJ 2337 Catenyms(有向欧拉图:输出欧拉路径)
题目链接>>>>>> 题目大意: 给出一些字符串,问能否将这些字符串 按照 词语接龙,首尾相接 的规则 使得每个字符串出现一次 如果可以 按字典序输出这个字符串 ...
- POJ 2337 Catenyms
http://poj.org/problem?id=2337 题意: 判断给出的单词能否首尾相连,输出字典序最小的欧拉路径. 思路: 因为要按字典序大小输出路径,所以先将字符串排序,这样加边的时候就会 ...
随机推荐
- 快速排序的php实现
再来一个非常高级的排序算法,快速排序...这个算法是很高效的. 快速排序的思路是,找到一个分割点(中枢点 默认是列表第一个值),把原列表分隔成两部分,在分割点左侧的是都比它小的,在它右侧的是都比它大的 ...
- 01-Mirrorgate简介
1.项目信息 MirrorGate是一款WallBoard应用程序,旨在为团队提供与软件开发相关的所有不同领域的快速反馈. 项目地址:https://github.com/BBVA/mir ...
- odoo 11导入外部数据过程记录
在开发过程中,遇见需要将SQL Server中的数据转移到Pg数据库的情况,那么如何做才能解决这一问题呢? 1.自己写代码,将数据从SQL Server到PG. 2.利用odoo自带的导入功能导入. ...
- 51nod 1295 XOR key 可持久化01字典树
题意 给出一个长度为\(n\)的正整数数组\(a\),再给出\(q\)个询问,每次询问给出3个数,\(L,R,X(L<=R)\).求\(a[L]\)至\(a[R]\)这\(R-L+1\)个数中, ...
- java基础(个人学习笔记) A
1. 声明long类型的变量 需要在数值的末尾+l/L.(不加L的话,貌似默认就是int型了.当给long赋值一个超过int范围的值的时候,会出问题.) 2. package java_ ...
- React.js 开发参见问题 Q&A
文章中我整理了 React.js 开发过程中一些参见问题的解答汇总,供大家参考. 1. 一些课程资源 课程完整的思维导图请查考文章:React.js 入门与实战课程思维导图,我使用的思维导图软件是 M ...
- zookeeper 动态管理nginx配置
假设我们有一个场景,所有服务器共享同一份配置文件,我们肯定不可能单独手动维护每台服务器,这时可以利用zookeeper的配置管理功能. 环境:python + nginx + zookeeper 目的 ...
- MRT与MRTS工具官宣退休,推荐使用HEG
今天错误的删除搞丢了之前下载的MRT与MRTS工具,浏览Modis官网下载时发现找不到了,后来在其官网上发现了这则通知,原来早已停止更新的MRT这次彻底退修了.通知原文如下~~~ The downlo ...
- Libp2p学习(一)
Libp2p学习 参考资料:libp2p-specifications : https://github.com/libp2p/specs 持续更新ing 1. 介绍 Libp2p的实现目标是: 支持 ...
- 这里已不再更新,访问新博客请移步 http://www.douruixin.com
这里已不再更新,访问新博客请移步 http://www.douruixin.com