题意:

给定n个点的有向完全图,希望通过其中n-1条边将n个点串起来(2<=n<=1000)

欧拉路径:经过所有边且只经过一次

哈密顿路径:经过所有点且只经过一次

思路:

本题条件特殊,有向完全图。构造法求解,将点插在head之前,tail之后,或head和tail之间(实际插在head后或tail前)

 #include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int N=1e3+;
int n,cnt;
const int INF = 0x3f3f3f3f;
char s[N];
int g[N][N];
int nxt[N];
void solve()
{
cin>>n;
for(int i=;i<n;i++)
{
scanf("%s",s);
int len = strlen(s);
for(int j=;j<len;j++)
{
if(s[j]=='+')
g[i][j]=;
}
}
memset(nxt,-,sizeof(nxt));
int head=;
int tail=;
if(g[][])swap(head,tail);
nxt[head]=tail;
for(int i=;i<=n-;i++)
{
if(g[i][head]) // head之前
{
nxt[i]=head;
head=i;
}
else if(g[tail][i]){ // tail之后
nxt[tail]=i;
tail=i;
}
else // head和tail之间插点
{
int now = head;
while(nxt[now]!=-) {
if (g[now][i] && g[i][nxt[now]]) {
nxt[i] = nxt[now];
nxt[now] = i;
break;
}
now = nxt[now];
}
}
}
vector<int> ans;
while(head!=-&&ans.size()<n)
{
ans.push_back(head);
head = nxt[head];
}
if(ans.size()!=n)
{
puts("NO");
}
else
{
puts("YES");
for(int i=;i<ans.size();i++)
{
if(i)cout<<" ";
cout<<ans[i];
}
}
puts("");
} int main()
{
solve();
return ;
}

CDOJ 1960 构造哈密顿路径的更多相关文章

  1. 哈密顿图 哈密顿回路 哈密顿通路(Hamilton)

    本文链接:http://www.cnblogs.com/Ash-ly/p/5452580.html 概念: 哈密顿图:图G的一个回路,若它通过图的每一个节点一次,且仅一次,就是哈密顿回路.存在哈密顿回 ...

  2. CDOJ 1288 旅游的Final柱 构造题

    旅游的Final柱 题目连接: http://acm.uestc.edu.cn/#/problem/show/1288 Description 柱神要去打Final啦~(≧▽≦)/~啦啦啦 柱神来到了 ...

  3. CDOJ 1281 暴兵的卿学姐 构造题

    暴兵的卿学姐 题目连接: http://acm.uestc.edu.cn/#/problem/show/1281 Description 沈宝宝又和卿学姐开始玩SC2了! 自从沈宝宝学会新的阵型后,就 ...

  4. CDOJ 1133 菲波拉契数制 变直接统计为构造

    菲波拉契数制 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  5. CDOJ 1264 人民币的构造 区间问题+数论

    人民币的构造 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status ...

  6. BZOJ4727 [POI2017]Turysta 【竞赛图哈密顿路径/回路】

    题目链接 BZOJ4727 题解 前置芝士 1.竞赛图存在哈密顿路径 2.竞赛图存在哈密顿回路,当且仅当它是强联通的 所以我们将图缩点后,拓扑排序后一定是一条链,且之前的块内的点和之后块内的点的边一定 ...

  7. CDOJ 1330 柱爷与远古法阵(高斯消元)

    CDOJ 1330 柱爷与远古法阵(高斯消元) 柱爷与远古法阵 Time Limit: 125/125MS (Java/Others)     Memory Limit: 240000/240000K ...

  8. SCIP:构造过程抽象--面向对象的解释

    心智的活动,除了尽力产生各种简单的认知之外,主要表现为如下三个方面:(1)将若干简单认知组合为一个复合的认识,由此产出各种复杂的认知.(2)将两个认知放在一起对照,不管他们如何简单或者复杂,在这样做时 ...

  9. 学习笔记:Maven构造版本号的方法解决浏览器缓存问题

    需要解决的问题 在做WEB系统开发时,为了提高性能会利用浏览器的缓存功能,其实即使不显式的申明缓存,现代的浏览器都会对静态文件(js.css.图片之类)缓存.但也正因为这个问题导致一个问题,就是资源的 ...

随机推荐

  1. 【转】Java并发编程:同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...

  2. 【转】Leveldb源码分析——1

    先来看看Leveldb的基本框架,几大关键组件,如图1-1所示. Leveldb是一种基于operation log的文件系统,是Log-Structured-Merge Tree的典型实现.LSM源 ...

  3. P3830 [SHOI2012]随机树 题解

    P3830 随机树 坑题,别人的题解我看了一个下午没一个看得懂的,我还是太弱了. 题目链接 P3830 [SHOI2012]随机树 题目描述 输入输出格式 输入格式: 输入仅有一行,包含两个正整数 q ...

  4. java 解压缩 中文名称问题

    public List<String> unZip(String pathString, String zipPathString) { long startTime = System.c ...

  5. MinGW GCC 7.2.0 2017年8月份出炉啦

    GCC720-for-MSYS2.7z for x86 x64 63.72 MB 发布日期: 2017-08-14 下载地址: https://forum.videohelp.com/attachme ...

  6. 微信小程序-两个input叠加,多次点击字体变粗或闪动

    问题描述: 当两个input叠加,多次点击input框, placeholder 字体变粗或input框闪动.如图: 代码: <!-- 最上层input-1 --> <input p ...

  7. 034_nginx报错总结

    一.nginx: [emerg] "client_header_timeout" directive is not allowed here in /opt/nginx/conf/ ...

  8. thinkphp中的内置操作数据库与mysql中的函数汇总

    8.4.4 Model类getModelName() 获取当前Model的名称getTableName() 获取当前Model的数据表名称switchModel(type,vars=array()) ...

  9. 用layui搭建的后台框架

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. MYSQL事务处理失效原因

    mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)安装时默认的存储引擎是MyISAM,而MyISAM存储引擎是不支持事务处理的 ...