NYOJ 99单词拼接(有向图的欧拉(回)路)
/*
NYOJ 99单词拼接:
思路:欧拉回路或者欧拉路的搜索!
注意:是有向图的!不要当成无向图,否则在在搜索之前的判断中因为判断有无导致不必要的搜索,以致TLE!
有向图的欧拉路:abs(In[i] - Out[i])==1(入度[i] - 出度[i])的节点个数为两个
有向图的欧拉回路:所有的节点都有In[i]==Out[i]
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std; struct node{
char s[];
int first, end;
}; bool cmp(node a, node b){
return strcmp(a.s, b.s) <;
} node nd[];
int In[], Out[];
int order[], vis[];
int n; int fun(){
memset(vis, , sizeof(vis));
int i;
int last=-;
int first=-;
//有向图欧拉路的判断
for(i=; i<; ++i)
{
if(In[i]!=Out[i])
{ //首先入度和出度之差的绝对值为 1的节点的要么没有,要么只有两个(没有欧拉回路,只有欧拉路)!
if(Out[i]-In[i]== && first==-)
first=i;
else if(Out[i]-In[i]==- && last==-)
last=i;
else
return -;
}
}
if(first>- && last>-) //这种情况是 欧拉路的搜索 !
return first;
else if(first==- && last==-) //这种是欧拉回路的搜索!
{
for(i=; i<; ++i)
if(In[i]!=)
return i;
}
else
return -;
} bool dfs(int st, int cnt){
if(cnt == n)
return true;
int ld=, rd=n-;
while(ld<=rd){
int mid=(ld+rd)/;
if(nd[mid].first<st)
ld=mid+;
else rd=mid-;
}
int m=rd+;
if(nd[m].first > st) return false;
for(int i=m; i<n; ++i)
if(!vis[i]){
if(nd[i].first > st)
return false;
if(nd[i].first == st){
vis[i]=;
order[cnt]=i;
if(dfs(nd[i].end, cnt+)) return true;
vis[i]=;
}
}
return false;
} int main(){
int t;
scanf("%d", &t);
while(t--){
scanf("%d", &n);
memset(In, , sizeof(In));
memset(Out, , sizeof(Out));
for(int i=; i<n; ++i){
scanf("%s", nd[i].s);
nd[i].first=nd[i].s[]-'a';
nd[i].end=nd[i].s[strlen(nd[i].s)-]-'a';
++Out[nd[i].first];
++In[nd[i].end];
} int st = fun();
//因为搜索的是字典序的第一个,所以将字符串从小到大排一下序!在搜索的时候按照升序搜索组合!
sort(nd, nd+n, cmp);
if(st==- || !dfs(st, ))
printf("***\n");
else{
printf("%s", nd[order[]].s);
for(int i=; i<n; ++i)
printf(".%s", nd[order[i]].s);
printf("\n");
}
}
return ;
}
NYOJ 99单词拼接(有向图的欧拉(回)路)的更多相关文章
- nyoj 99 单词拼接
点击打开链接 单词拼接 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串. 前一个单词的结尾应该与下一个单词的道字母相同 ...
- CF36 E Two Paths——欧拉(回)路
题目:http://codeforces.com/contest/36/problem/E 给定一张无向图,要求输出两条欧拉路覆盖所有边: 分类讨论,首先判-1:有两个以上连通块 / 有四个以上奇度数 ...
- POJ 2337 Catenyms(有向图的欧拉通路)
题意:给n个字符串(3<=n<=1000),当字符串str[i]的尾字符与str[j]的首字符一样时,可用dot连接.判断用所有字符串一次且仅一次,连接成一串.若可以,输出答案的最小字典序 ...
- NYIST 99 单词拼接
单词拼接时间限制:3000 ms | 内存限制:65535 KB难度:5 描述给你一些单词,请你判断能否把它们首尾串起来串成一串.前一个单词的结尾应该与下一个单词的道字母相同.如 aloha dog ...
- POJ 1780 Code(有向图的欧拉通路)
输入n(1<=n<=6),输出长度为10^n + n -1 的字符串答案. 其中,字符串以每n个为一组,使得所有组都互不相同,且输出的字符串要求字典序最小. 显然a[01...(n-1)] ...
- Poj 2337 Catenyms(有向图DFS求欧拉通路)
题意: 给定n个单词, 问是否存在一条欧拉通路(如acm,matal,lack), 如果存在, 输出字典序最小的一条. 分析: 这题可以看作http://www.cnblogs.com/Jadon97 ...
- HDU1116 Play on Words(有向图欧拉通路)
我把单词当作点,然后这样其实是不对的,这样就要判定是否是哈密顿通路.. 这题应该把单词的首尾单词当作点,而单词本身就是边,那样就是判定欧拉通路了. 有向图包含欧拉通路的充要条件是:首先基图连通,然后是 ...
- Uva 10129 - Play on Words 单词接龙 欧拉道路应用
跟Uva 10054很像,不过这题的单词是不能反向的,所以是有向图,判断欧拉道路. 关于欧拉道路(from Titanium大神): 判断有向图是否有欧拉路 1.判断有向图的基图(即有向图转化为无向图 ...
- GCD nyoj 1007 (欧拉函数+欧几里得)
GCD nyoj 1007 (欧拉函数+欧几里得) GCD 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 The greatest common divisor ...
随机推荐
- ‘ant-version’不是内部或外部命令,也不是可运行的程序
下载apache-ant-1.9.2-bin.zip后,解压目录:F:\selenium\apache-ant-1.9.2 配置环境变量,在“我的电脑->属性->高级->环境变量 - ...
- (一)读取PCD文件
下面是一个简单的读取PCD文件并显示的代码: #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/p ...
- 道路翻新 (Revamping Trails, USACO 2009 Feb)
题意:给定m<=50000的1-n有联通的图,求最多可以使K<=20条边变为0的情况下的最短路是多少.. 思路:简单的分层图最短路,对于每个点拆成K个点.. 然后求一边最短路.. code ...
- Linux内核--网络栈实现分析(六)--应用层获取数据包(上)
本文分析基于内核Linux 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7541907 更多请看专栏,地址http: ...
- 关于Android的背景色配色小结
三基色原理:三基色是指红,绿,蓝三色,人眼对红.绿.蓝最为敏感,大多数的颜色可以通过红.绿.蓝三色按照不同的比例合成产生.同样绝大多数单色光也可以分解成红绿蓝三种色光.这是色度学的最基本原理,即三基色 ...
- Ceph性能测试工具和方法。
0. 测试环境 同 Ceph 的基本操作和常见故障排除方法 一文中的测试环境. 1. 测试准备 1.1 磁盘读写性能 1.1.1 单个 OSD 磁盘写性能,大概 165MB/s. root@ceph1 ...
- flashcache
Flashcache系统管理员手册 1.简介Flashcache 是为Linux操作系统开发的块设备回写缓存内核模块,使用了Device Mapper的方式实现,本文档可指导你快速掌握Flashcac ...
- Revert R12.1.3 Homepage Layout to Link Style as in R12.1.1 or 11i
https://blogs.oracle.com/ptian/entry/revert_r12_1_3_homepage Oracle EBS 12.1.3主页的展示方式不太习惯,12.1.3为了展示 ...
- java jstack命令详解
名称jstack: stack trace 摘要: jstack [ option ] pid jstack [ option ] executable core jstack [ option ] ...
- JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (1):NetBeans 寫 Servlet (转帖)
JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (1):NetBeans 寫 Servlet 功能:這支程式的主要功能是將 javafx 與 swi ...