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 ≤ i ≤ k − 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 ≤ i ≤ k). 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 ≤ M ≤ N · (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, b ≤ N; a ≠ b; 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. Spring学习笔记之初始化和销毁方法的调用次序

    Multiple lifecycle mechanisms configured for the same bean, with different initialization methods, a ...

  2. IOS弹出视图 LewPopupViewController

    LewPopupViewController是一款IOS弹出视图软件.iOS 下的弹出视图.支持iPhone/iPad. 软件截图 使用方法 弹出视图 1 2 3 4 5 PopupView *vie ...

  3. ACM - 概率、期望题目 小结(临时)

    概率DP求期望大多数都是全期望公式的运用.主要思考状态空间的划分以及状态事件发生的概率.问题可以分为无环和有环两类.无环一类多数比较简单,可以通过迭代或者记忆化搜索完成.有环一类略复杂,可以通过假设方 ...

  4. 2016 - 1 - 3 国旗选择demo

    // // ViewController.m // 国旗 // // Created by Mac on 16/1/3. // Copyright © 2016年 Mac. All rights re ...

  5. Chapter 2: A Simple Servlet Container

    一.这一章从头构建一个简单的Servlet容器,可以处理Servlet和静态资源(如html文件/图片等). 要处理Servlet,必须遵循javax.servlet.Servlet规范,而处理静态资 ...

  6. Repeater分页

    void BindData()        {            PagedDataSource pds = new PagedDataSource();                     ...

  7. LeetCode 笔记系列 19 Scramble String [合理使用递归]

    题目: Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty subs ...

  8. php空心菱形

    <?php for($i=1;$i<=9;$i++){ for($j=1;$j<=9-$i;$j++){ echo " "; } for($k=1;$k<= ...

  9. Ubuntu 重新设置网络

    sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service ...

  10. HDU 4462

    http://acm.hdu.edu.cn/showproblem.php?pid=4462 一道题意不清的水题 题意:给一个n*n的格子,在上面放草人,每个草人有恐惧范围,问最少选择几个草人可以覆盖 ...