题目传送门

题目中文翻译:

Description

桑给巴尔岛上的阿德尔顿镇有一家旅行社,它已决定为其客户提供除了许多其他名胜之外的景点。为了尽可能地从景点赚取收入,该机构已经接受了一个精明的决定:有必要找到在同一地点开始和结束的最短路线。你的任务是写一个找到这样的路线的程序。

镇内有N个交叉点,编号从1到N。同时有M条双向路,编号从1到M。两个交叉点可以由多条道路连接,但没有道路将交叉点与自己连接。每条观光环线都是一系列道路编号y_1,...,y_k,k> 2。道路y_i(1 <= i <= k-1)连接交叉点x_i和x_ {i + 1},道路y_k连接交叉点x_k和x_1。所有的数字x_1,...,x_k应该是不同的。观光路线的长度是观光路线上所有道路长度的总和,即L(y_1)+ L(y_2)+ ... + L (y_k)其中L(y_i)是道路y_i的长度(1 <= i <= k)。你的程序必须找到这样一条观光路线,其长度最短,或者说明这是不可能的,因为镇上没有观光环线。

Input

第一行输入包含两个正整数:交叉点N <= 100和道数M <= 10000。 接下来的M行中的每一行描述一条道路。 它包含3个正整数:第一个交点的编号,第二个交点的编号和道路的长度(小于500的正整数)。

Output

输出中只有一行,一个字符串。如果没有任何观光路线,输出'No solution.' 或者列出最短观光路线上所有交叉点的编号,以便让我们知道如何设计路线(即从我们对观光路线的定义中的数字x_1到x_k),由空格分离。如果有多条最小长度的观光路线,您可以输出其中任何一条。

Sample Input

5 7

1 4 1

1 3 300

3 1 10

1 2 16

2 3 100

2 5 15

5 3 20

Sample Output

1 3 5 2

解题思路:

本题其实就是求一个图中的最小环的路径.

AC代码:

 #include<cstdio>
#include<iostream> using namespace std; int g[][],dis[][],path[][];
//path[i][j]表示i到j的最短路径中j的前一个点
//dis[i][j]表示i到j最短的那条路径
int n,m,ans[],mi,cnt; inline void chushihua() {
for(int i = ;i <= n; i++)
for(int j = ;j <= n; j++)
dis[i][j] = g[i][j] = 0x3f3f,path[i][j] = i;
} inline void _read() {
int u,v,w;
for(int i = ;i <= m; i++) {
scanf("%d%d%d",&u,&v,&w);
dis[u][v] = dis[v][u] = g[u][v] = g[v][u] = min(w,dis[u][v]);
}
} inline void Floyd() {
mi = 0x3f3f;
for(int k = ;k <= n; k++){
for(int i = ;i < k; i++)
for(int j = ;j < i; j++) {
if(dis[i][j] + g[i][k] + g[k][j] < mi) {
mi = dis[i][j] + g[i][k] + g[k][j];
int tmp = j;
cnt = ;
while(tmp != i) {
ans[cnt++] = tmp;
tmp = path[i][tmp];
}
ans[cnt++] = i;
ans[cnt++] = k;
}
}
for(int i = ;i <= n; i++)
for(int j = ;j <= n; j++) {
if(dis[i][k] + dis[k][j] < dis[i][j]) {
dis[i][j] = dis[i][k] + dis[k][j];
path[i][j] = path[k][j];
}
}
}
} inline void _print() {
if(mi == 0x3f3f)
printf("No solution.");
else {
for(int i = ;i < cnt; i++)
printf("%d ",ans[i]);
printf("%d",ans[]);
} } int main()//简洁易懂的主函数
{
scanf("%d%d",&n,&m);
chushihua();
_read();
Floyd();
_print();
return ;
}

POJ 1734 Sightseeing trip(Floyd)的更多相关文章

  1. poj 1734 Sightseeing trip判断最短长度的环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5590   Accepted: 2151 ...

  2. POJ 1734.Sightseeing trip (Floyd 最小环)

    Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...

  3. POJ 1734 Sightseeing trip

    题目大意: 求一个最小环. 用Floyd 求最小环算法. #include <iostream> #include <cstdlib> #include <cstdio& ...

  4. POJ 1734 Sightseeing trip(无向图最小环+输出路径)

    题目链接 #include <cstdio> #include <string> #include <cstring> #include <queue> ...

  5. poj 1734 Sightseeing trip_ 最小环记录路径

    题意:求最出小环,输出路径 #include <iostream> #include<cstdio> using namespace std; #define N 110 #d ...

  6. #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)

    https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...

  7. poj1734 Sightseeing trip(Floyd求无向图最小环)

    #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...

  8. Sightseeing trip POJ - 1734 -Floyd 最小环

    POJ - 1734 思路 : Floyd 实质 dp ,优化掉了第三维. dp [ i ] [ j ] [ k ] 指的是前k个点优化后    i  ->  j   的最短路. 所以我们就可以 ...

  9. POJ 1734:Sightseeing trip

    Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Special Judge ...

随机推荐

  1. UVA - 11572 Unique Snowflakes(唯一的雪花)(滑动窗口)

    题意:输入一个长度为n(n <= 10^6)的序列A,找到一个尽量长的连续子序列AL~AR,使得该序列中没有相同的元素. 分析: 法一:从r=0开始不断增加r,当a[r+1]在子序列a[l~r] ...

  2. Java算法练习——正则表达式匹配

    题目链接 题目描述 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要 ...

  3. UML概念

    UML UML:Unified Modeling Language是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明,可视化,结构和编写一个正在开发的,面向对象的,软件密集系统的制品开放 ...

  4. gogs 小团队使用

    最近小团队开始使用 gogs 来保存手头的项目.具体的使用流程如下: 由 root 用户新建 organization, 比如说建立 hardware,然后把团队的 技术负责人拉到 owners 这个 ...

  5. python2和python3共存

    有很多朋友有这样的烦恼,自己的电脑里装了python2和python3,但是有些时候可能出现只能用python2或python3的情况,这个时候就蒙圈了,不知所措啊,我也是经过了这样的无奈,最后终于找 ...

  6. LIS是什么?

    在之前的随笔中,大概介绍了医疗系统有哪些,是干什么的,是怎么配合医院业务的.现在就开始主要的说一说我的主要工作业务 — LIS了. 前面说到过LIS(LIMS),名称是实验室信息管理系统,大概可以分解 ...

  7. JS/JQUERY函数库

    1. 判断字符串是否为空 function isEmptyString(str) { return str == undefined || str == "" || str == ...

  8. JavaSE--java是值传递还是引用传递

    引用是已定义的变量的别名. 按引用传递就是一个变量使用两个名称. 两个变量在内存中的地址都是一样的. 按值传递, 传递的是值的拷贝. C++中可以通过传引用来改变传入的参数的值.在C++中可以通过以下 ...

  9. 网格视图GridView

    1.常用属性 2.Adapter接口 3.Demo演示 今天观看了GridView的相关视频,并且根据案例,进行了代码的编写和实例 新建GridViewActivity.java继承AppCompat ...

  10. 主席树的妙用——Just h-index

    题目传送门:https://ac.nowcoder.com/acm/contest/1107/C 题意:给出一个区间,求最大的 h ,使得区间内至少有 h 个数 大于等于 h. 思路:1.需要区间有序 ...