【九度】题目1414:旅游啦
来源:互联网 发布:澳大利亚移民知乎 编辑:程序博客网 时间:2024/05/17 06:27
- 题目地址:http://ac.jobdu.com/problem.php?pid=1414
题目描述: - 你们可曾计划过今年暑假的毕业旅行呢?当年阳仔毕业旅行时,本来预计去的10个城市,结果因为没做足准备,才去了5个城市,并且白浪费了很多大洋在一个城市周转。今年他为了弥补上回的缺憾,打算再一次周游旅行,并且这次他计划了50个城市!!!阿门!!!你们也知道的,周游旅行需要大笔费用。因此,阳仔打算坐动车,并将所到城市都拍张照片留作纪念。暑假2个月时间并不是所有城市都有动车可以直达的,如果某个城市没有动车,那他只能放弃去那个城市了。另外,可以保证如果动车可以从A->B,那么这班动车也可以从B->A。请你帮阳仔算下,阳仔开始所在城市编号为0,要到达所有的其他可以到达的城市,这一波旅行的最短路程是多少?
- 输入:
- 输入有多组测试案例,每个测试案例为m+1行。第一行输入一个整数m表示有m条线路,接下去的m行,每行输入3个整数表示动车线路的始发点和路程。(城市编号从0 开始到 49,注意,不是所有的城市都可能有线路可以到达,我们保证给出的数据可以构成连通图并且至少有一条线路包含0。并且保证图没有环、没有重边,实际上已被简化为一棵树。)
- 输出:
- 对应每个测试案例,输出从0号城市出发,周游其他城市的最短旅游行程。
- 样例输入:
50 1 100 3 100 4 1001 2 104 5 5
- 样例输出:
165
- 提示:
- 案例中出现6个城市,因此阳仔要访问其余5个城市的最短旅游路线是:0->1->2->1->0->3->0->4->5
- dijkstra算法的变形。
从0点出发,求出0点到其他点的最短距离。
我们考虑以0为中转点。
比如到1以后,1不能到其他城市,就返回到0,继续去其他城市。
除了最长路走一遍以外,其他都需要往返一次。也就是距离*2。
最后的结果就是2*总距离-最大距离。 - C++ AC
#include <stdio.h>#include <string.h>#define INF 10000000;const int maxn = 50; int path[maxn][maxn];int minLen[maxn];int visited[maxn];int m,i,j;int dijkstra(){ minLen[0] = 0; visited[0] = 1; int minj = 0; for(i = 0; i < maxn; i++){ int min = INF; for(j = 0; j < maxn; j++){ if(visited[j] == 0 && minLen[j] < min){ min = minLen[j]; minj = j; } } visited[minj] = 1; for(j = 0; j < maxn ; j++){ if (visited[j] == 0 && minLen[j] > (minLen[minj] + path[minj][j])) { minLen[j] = minLen[minj] + path[minj][j]; } } } int maxLen = 0; for (i = 1; i < maxn; i++) { if(maxLen < minLen[i] && minLen[i] < 10000000){ maxLen = minLen[i]; } } return maxLen;}int main(){ while(scanf("%d",&m) != EOF){ for(i = 0; i < maxn; i++){ for(j = 0; j < maxn; j++){ path[i][j] = INF; } } int sum = 0; for(i = 0; i < m; i++){ int a,b,d; scanf("%d%d%d",&a,&b,&d); if(path[a][b] > d){ path[a][b] =d; path[b][a] = d; sum += d; } } memset(visited,0,sizeof(visited)); for(i = 1; i < maxn; i++){ minLen[i] = path[0][i]; } int maxLen = dijkstra(); printf("%d\n",2*sum - maxLen); } return 0;} /************************************************************** Problem: 1414 User: wangzhenqing Language: C++ Result: Accepted Time:30 ms Memory:1032 kb****************************************************************/
Java ACimport java.io.BufferedReader;import java.io.InputStreamReader;import java.io.StreamTokenizer; public class Main { /* * 1414 */ private static int n = 50; public static void main(String[] args) throws Exception { StreamTokenizer st = new StreamTokenizer( new BufferedReader(new InputStreamReader(System.in))); while (st.nextToken() != StreamTokenizer.TT_EOF) { int m = (int) st.nval; int cost[][] = new int[n][n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cost[i][j] = Integer.MAX_VALUE; } } int sum = 0; for (int i = 0; i < m; i++) { st.nextToken(); int a = (int) st.nval; st.nextToken(); int b = (int) st.nval; st.nextToken(); int d = (int) st.nval; if (cost[a][b] > d ) { cost[a][b] = d; cost[b][a] = d; sum += d; } } int minCost[] = new int[n]; int visit[] = new int[n]; for (int i = 0; i < n; i++) { minCost[i] = cost[0][i]; } int maxLen = dijkstra(cost , minCost , visit); System.out.printf("%d\n",2*sum - maxLen); } } private static int dijkstra(int[][] cost ,int[] minCost, int[] visit) { minCost[0] = 0; visit[0] = 1; int minj = 0; for (int i = 0; i < n; i++) { int min = Integer.MAX_VALUE; for (int j = 0; j < n; j++) { if (visit[j] == 0 && minCost[j] < min) { min = minCost[j]; minj = j; } } visit[minj] = 1; for (int j = 0; j < n; j++) { if (visit[j] == 0 && minCost[j] > (minCost[minj] + cost[minj][j]) && minCost[minj] != Integer.MAX_VALUE && cost[minj][j] != Integer.MAX_VALUE) { minCost[j] = minCost[minj] + cost[minj][j]; } } } int maxLen = 0; for (int i = 0; i < n; i++) { if(maxLen < minCost[i]&& minCost[i] != Integer.MAX_VALUE){ maxLen = minCost[i]; } } return maxLen; }}/************************************************************** Problem: 1414 User: wzqwsrf Language: Java Result: Accepted Time:400 ms Memory:24856 kb****************************************************************/
0 0
- 【九度】题目1414:旅游啦
- 九度OJ:题目1406 上班啦
- 九度题目1202
- 九度题目1061
- 九度题目1185
- 九度题目1023
- 九度题目1054
- 九度题目1096
- 九度题目1043
- 九度题目1070
- 九度题目1186
- 九度题目1018
- 九度题目1431
- 九度题目1156
- 九度题目1088
- 九度题目1065
- 九度题目1432
- 九度题目1052
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC CHECKTABLE检查组成表或索引视图的所有页和结构的完整性
- libzbar.a armv7
- directx的安装与配置
- rcp嵌入Eclipse自带的console
- android chromium点击链接打开新标签页过程分析
- 【九度】题目1414:旅游啦
- 复习笔记之二--用户方式线程同步
- 效仿存储过程,尽管不懂,留个模板。
- 如何将PDF转html5?
- bat 命令学习
- ubuntu 10 安装samba服务,windows下磁盘驱动映射
- Linux kernel测试初探
- 基于Weblogic11的Mule3.5部署指南
- about unicode