XTU 1179 Shortest Path

2023-12-15 17:58
文章标签 path shortest xtu 1179

本文主要是介绍XTU 1179 Shortest Path,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Shortest Path

[ Submit Code ] [ Top 20 Runs ]
Acceteped : 56   Submit : 223
Time Limit : 5000 MS Memory Limit : 65536 KB
 

Description

题目描述

N(3≤N≤1,000)个城市(编号从1~N),M(N-1≤M≤10,000)条公路连接这些城市,每条公路都是双向通车的。 你想从1号城市出发,到达N号城市,期间你希望通过按顺序经过K(0≤K≤3)个指定的城市(这K+2个城市只允许达到1次),求最短的里程。

输入

存在多个样例。 每个样例的第一行是三个整数N,M,K。如果N,M,K为0,则表示输入结束。 以后是M行表示M条公路,每行三个整数x(1≤x≤N),y(1≤y≤N),c(1≤c≤1,000),表示城市x与城市y之间有一条距离为c的公路。输入保证任意两座城市之间至少存在一条路。然后的一行包含K个城市的序号,序号属于[2,N-1]。

输出

每行输出一个样例的结果,为一个整数。如果不存在这样的方案,输出“Impossible”。

样例输入
3 3 1 
1 2 3
2 3 4
1 3 2
2
0 0 0
样例输出
7
 

Sample Input

 

Sample Output

 

Source

 
[ Submit Code ] [ Top 20 Runs ]


思路:最短路问题。因为被要求的几个城市只能去一次,所以在求最短路的时候,只要将其屏蔽掉即可,详见代码。

AC代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int inf = 0x3f3f3f3f;
int w[maxn][maxn];
int d[maxn], city[5];
bool vis[maxn];
int n, m, k;void dijkstra(int s, int t){for (int i=1; i<=n; ++i)vis[i] = false;for (int i=1; i<=n; ++i)d[i] = w[s][i];for (int i=0; i<=k+1; ++i)if (city[i]!=s && city[i]!=t)vis[city[i]] = true;for (int i=1; i<=n; ++i){int mi=inf, x=1;for (int y=1; y<=n; ++y)if (!vis[y] && d[y]<=mi)mi = d[x=y];if (mi == inf)break;vis[x] = true;for (int y=1; y<=n; ++y)if (!vis[y] && d[x]+w[x][y]<d[y])d[y] = d[x]+w[x][y];}
}int main(){ios::sync_with_stdio(false);cin.tie(0);while (~scanf("%d%d%d", &n, &m, &k) && n+m+k){for (int i=1; i<=n; ++i)for (int j=1; j<=n; ++j){if (i != j)w[i][j] = inf;elsew[i][j] = 0;}int x, y, c;while (m--){scanf("%d%d%d", &x, &y, &c);if (c < w[x][y])w[x][y] = w[y][x] = c;}city[0] = 1;city[k+1] = n;for (int i=1; i<=k; ++i)scanf("%d", city+i);int ans = 0;bool ok = true;for (int i=0; i<=k; ++i){dijkstra(city[i], city[i+1]);if (d[city[i+1]] == inf){ok = false;break;}ans += d[city[i+1]];}if (ok)printf("%d\n", ans);elseprintf("Impossible\n");}return 0;
}

这篇关于XTU 1179 Shortest Path的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/497343

相关文章

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

XTU 1233 n个硬币连续m个正面个数(dp)

题面: Coins Problem Description: Duoxida buys a bottle of MaiDong from a vending machine and the machine give her n coins back. She places them in a line randomly showing head face or tail face o

POJ 2001 Shortest Prefixes(字典树入门)

题目: http://poj.org/problem?id=2001 题意: 找到多个字符串中,各自唯一的最短子串,例如 carte 与 carce 各自唯一的最短子串为cart与carc,即不会与其它字符串的子串重复。 思路: 字典树 解题心得: 更新关键值的时机很重要 代码: #include<stdio.h>#include<string>typedef str

Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解

Flask 在创建app的时候 是用 app = Flask(__name__) 来创建的,不传入 static_folder参数的话 ,默认的静态文件的位置是在 static目录下 我们可以进入 Flask的源码里面查看 ctrl+鼠标左键进入 这是Flask的 __init__源码(后面还有一些,我就选了需要的代码)     def __init__(self,import_

(4)SVG-path中的椭圆弧A(绝对)或a(相对)

1、概念 表示经过起始点(即上一条命令的结束点),到结束点之间画一段椭圆弧 2、7个参数 rx,ry,x-axis-rotation,large-arc-flag,sweep-flag,x,y (1)和(2)rx,ry rx:椭圆的x轴半径(即水平半径) ry:椭圆的y轴半径(即垂直半径) 这两个参数好理解,就是椭圆的两条对称轴半径,相等即为圆 也可以写比例,写比例时默认用符合条件

【ArcGIS Pro实操第二期】最小成本路径(Least-cost path)原理及实操案例

ArcGIS Pro实操第一期:最小成本路径原理及实操案例 概述(Creating the least-cost path)1.1 原理介绍1.2 实现步骤1.3 应用案例 2 GIS实操2.1 工具箱简介2.1.1 成本路径(Cost path)2.1.2 成本距离(Cost distance)2.1.2 路径距离(Path Distance) 2.2 案例: 参考 概述(Cre

大数据Java基础-JAVA IO 9】java IO流 (九) Path、Paths、Files的使用

1.NIO的使用说明: >Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO AP。 >NIO与原来的IO同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。 >NIO将以更加高效的方式进行文件的读写操作。 >随着 JDK 7 的发布,Java对N

最短路径(Shortest Path)

单源最短路径问题 Dijkstra算法:基于递推的思想设计 未达顶点的最短路径一定是由已到达顶点的最短路径求出 所有顶点之间的最短路径,任意两个顶点之间的最短路径 Floyd算法:只是Dijkstra最短路径算法的加强,其本质还是递推

【ArcGIS Pro实操第一期】最小成本路径(Least-cost path)原理及实操案例

ArcGIS Pro实操第一期:最小成本路径原理及实操案例 概述(Creating the least-cost path)1.1 原理介绍1.2 实现步骤1.3 应用案例 2 GIS实操2.1 工具箱简介2.1.1 成本路径(Cost path)2.1.2 成本距离(Cost distance)2.1.2 路径距离(Path Distance) 2.2 案例: 参考 概述(Cre

[LeetCode] 64. Minimum Path Sum

题:https://leetcode.com/problems/minimum-path-sum/description/ 题目 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which minimizes the sum of all numbers