Sightseeing Trip

Time limit: 0.5 second
Memory limit: 64 MB
There is a travel agency in Adelton town on Zanzibar island. It has decided to
offer its clients, besides many other attractions, sightseeing the town. To
earn as much as possible from this attraction, the agency has accepted a
shrewd decision: it is necessary to find the shortest route which begins and
ends at the same place.
Your task is to write a program which finds such a route.
In the town there are N crossing points numbered from 1 to N and M two-way
roads numbered from 1 to M. Two crossing points can be connected by multiple
roads, but no road connects a crossing point with itself. Each sightseeing
route is a sequence of road numbers y1, …, yk, k > 2. The road yi
(1 ≤ ik − 1) connects crossing points xi and xi+1, the road yk connects
crossing points xk and x1. All the numbers x1, …, xk should be different.
The length of the sightseeing route is the sum of the lengths of all roads on
the sightseeing route, i.e. L(y1) + L(y2) + … + L(yk) where L(yi) is the
length of the road yi (1 ≤ ik). Your program has to find such a sightseeing
route, the length of which is minimal, or to specify that it is not possible,
because there is no sightseeing route in the town.

Input

Input contains T tests (1 ≤ T ≤ 5).
The first line of each test contains two integers: the
number of crossing points N and the number of roads M (3 ≤ N ≤ 100; 3 ≤ MN · (N − 1)).
Each of the next M lines describes one road. It contains 3 integers: the number
of its first crossing point a, the number of the second one b, and the length of the road l (1 ≤ a, bN; ab; 1 ≤ l ≤ 300). Input is ended with a “−1” line.

Output

Each line of output is an answer. It contains either a string
“No solution.” in case there isn't any sightseeing route, or it contains the
numbers of all crossing points on the shortest sightseeing route in the order
how to pass them (i.e. the numbers x1 to xk from our definition of a
sightseeing route), separated by single spaces. If there are multiple
sightseeing routes of the minimal length, you can output any one of them.

Sample

input output
5 7
1 4 1
1 3 300
3 1 10
1 2 16
2 3 100
2 5 15
5 3 20
4 3
1 2 10
1 3 20
1 4 30
-1
1 3 5 2
No solution.
Problem Source: Central European Olympiad in Informatics 1999
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <string>
#include <stack>
#include <queue>
#include <vector>
#define inf 0x3f3f3f3f
#define met(a,b) memset(a,b,sizeof a)
typedef long long ll;
using namespace std;
const int N = 1e2+;
const int M = ;
const int INF=0x7ffffff;
int dist[N][N], w[N][N];
int pre[N][N];
int path[N];
int n, m, num, minc; void floyd() {
minc=INF;
for(int k=; k<=n; k++) {
for(int i=; i<k; i++)
for(int j=i+; j<k; j++) {
int ans=dist[i][j]+w[i][k]+w[k][j];
if(ans<minc) { //找到最优解
minc=ans;
num=;
int p=j;
while(p!=i) { //逆向寻找前驱遍历的路径并将其存储起来
path[num++]=p;
p=pre[i][p];
}
path[num++]=i;
path[num++]=k;
}
}
for(int i=; i<=n; i++)
for(int j=; j<=n; j++) {
if(dist[i][j]>dist[i][k]+dist[k][j]) {
dist[i][j]=dist[i][k]+dist[k][j];
pre[i][j]=pre[k][j];
}
}
}
} int main() {
int u, v, cost;
while(cin >> n) {
if(n<) break;
cin >> m;
for(int i=; i<=n; i++)
for(int j=; j<=n; j++) {
dist[i][j]=w[i][j]=INF;
pre[i][j]=i;
}
for(int i=; i<=m; i++) {
scanf("%d%d%d",&u,&v,&cost);
if(dist[u][v]>cost) //处理重边
w[u][v]=w[v][u]=dist[u][v]=dist[v][u]=cost;
}
floyd();
if(minc==INF)
printf("No solution.\n");
else {
printf("%d",path[]);
for(int i=; i<num; i++)
printf(" %d",path[i]);
puts("");
}
}
return ;
}

URAL 1004 Sightseeing Trip(最小环)的更多相关文章

  1. Ural 1004 Sightseeing Trip

    Sightseeing Trip Time Limit: 2000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...

  2. URAL 1004 Sightseeing Trip(floyd求最小环+路径输出)

    https://vjudge.net/problem/URAL-1004 题意:求路径最小的环(至少三个点),并且输出路径. 思路: 一开始INF开大了...无限wa,原来相加时会爆int... 路径 ...

  3. poj1734 Sightseeing trip[最小环]

    一个最小环裸题.最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了. 注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编 ...

  4. poj1734 Sightseeing trip【最小环】

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:8588   Accepted:3224   ...

  5. 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd

    题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...

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

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

  7. 【poj1734】Sightseeing trip

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8520   Accepted: 3200 ...

  8. POJ 1734:Sightseeing trip

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

  9. [CEOI1999]Sightseeing trip(Floyed)

    [CEOI1999]Sightseeing trip Description There is a travel agency in Adelton town on Zanzibar island. ...

随机推荐

  1. 戴文的Linux内核专题:08内核配置(4)

    转自Linux中国 这个第四部分里,我们将继续配置更多的设置和特性. 这里我们被问及关于"IBM Calgary IOMMU support (CALGARY_IOMMU)".这个 ...

  2. 【转发】linux yum命令详解

    linux yum命令详解 yum(全 称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理, ...

  3. hbase基本概念和hbase shell常用命令用法

    1. 简介 HBase是一个分布式的.面向列的开源数据库,源于google的一篇论文<bigtable:一个结构化数据的分布式存储系统>.HBase是Google Bigtable的开源实 ...

  4. 上架app 到app store 的出现: “The IPA is invalid. It does not inlude a Payload directory.”错误处理

    今天打包上传app到app store上遇到的一个错误,在xcode6.2下提示: The IPA is  invalid. It does not inlude a Payload director ...

  5. CDH上执行WordCount的意外和收获

    前面将Cloudera Manager安装到集群上的一台主机后,并通过Cloudera manager安装了hadoop-2.6.0-CDH5.4.4.今日来测试安装的集群是否很够很好的执行mapre ...

  6. About View

    View Geometry Frame & Bounds Graphically, a view can be regarded as a framed canvas. The frame l ...

  7. linux上安装hadoop

    机器准备 物理机器 总 共4台,想配置基于物理机的hadoop集群中包括 4 个 节点: 1 个 Master , 3 个 Salve , 节点之间局域网连接,可以相互 ping 通Ip分布 为192 ...

  8. UI基础:UIActionSheet和UIAlterView

    iOS中有两个弹出视图的控件,分别是UIActionSheet和UIAlterView.效果图如下:       主要代码如下: - (void)viewDidLoad { [super viewDi ...

  9. LITTLE SHOP OF FLOWERS_DP

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20802   Accepted: 9613 Description You ...

  10. pscp使用详解 Windows与Linux文件互传工具

    pscp使用详解 Windows与Linux文件互传工具 pscp使用方法详解:pscp是putty安装包所带的远程文件传输工具,是一款十分常见windows与linux系统之间文件互传的工具,使用方 ...