北大ACM3268——Silver Cow Party~~最短路径
来源:互联网 发布:pdf.js scale宽度比例 编辑:程序博客网 时间:2024/05/16 14:31
这一题的大概题意是:在N个农场中,指定一个农场X,剩余的农场要有牛来到农场X参加Party,每只牛来到农场X会走最短的路径,返回的路径不一定按原路返回,因为每一条路都是单向的。返回也走最短路径。求N - 1 只牛去参加Party到返回自己农场的最短路径和中的最大值。
简单的最短路径,一开始用了Floyd算法,超时了,N最大达到了1000,N^3的复杂度,绝对的超时。
只能换另外的一种算法来求解。
首先分析下题目要我们求解的最短路径和。
从农场X到其他农场的最短路径,可以用Dijkstra算法或者Bellman_Ford算法来求解。表示各个牛返回的最短路径。
而牛到农场X的最短路径如何求解呢,想到这一点就简单了,也就是将各条单向路径的方向调转,也就是本来从农场1到农场2的路径,变成农场2到农场1的路径。然后再次求解农场X到其他农场的最短路径,就求出了其他牛到农场X的最短路径。
下面的是AC的代码,有详细注释:
#include <iostream>#include <cstdio>using namespace std;const int INF = 10000000;int dis1[1005], dis2[1005]; //返回最短路径,过去的最短路径int cost[1005][1005];bool vis[1005]; //标记是否返问过int N, X, M;int min(int x, int y){return x > y ? y : x;}void dijkstra(int s, int dis[]) //dijkstra算法求解单源最短路径{for(int i = 0; i <= N; i++){vis[i] = false;dis[i] = INF;}dis[s] = 0;while(true){int v = -1;for(int u = 1; u <= N; u++) //从没有选过的顶点中选取一个距离最短的顶点{if(!vis[u] && (v < 0 || dis[v] > dis[u]))v = u;}if(v == -1)break;vis[v] = true;for(int j = 1; j <= N; j++){dis[j] = min(dis[j], dis[v] + cost[v][j]);}}}int main(){//freopen("data.txt", "r", stdin);int i, j, a, b, c;while(scanf("%d%d%d", &N, &M, &X) != EOF){for(i = 1; i <= N; i++) //初始化各边权值的数组,for(j = 1; j <= N; j++){if(i == j)cost[i][j] = 0;elsecost[i][j] = INF;}for(i = 0; i < M; i++){scanf("%d%d%d", &a, &b, &c); //输入各边权值cost[a][b] = c;}dijkstra(X, dis1); //算返回最短路径for(i = 1; i <= N; i++) //调转各边,也就是将矩阵转置{for(j = 1; j < i; j++){int temp = cost[i][j];cost[i][j] = cost[j][i];cost[j][i] = temp;}} dijkstra(X, dis2); //算出发最短路径int max = -100000;for(i = 1; i <= N; i++) //枚举求最大的最短路径和{if(i != X){int temp = dis1[i] + dis2[i];if(max < temp)max = temp;}}printf("%d\n", max);}return 0;}
0 0
- 北大ACM3268——Silver Cow Party~~最短路径
- POJ3268 Silver Cow Party(最短路径)
- POJ3268-Silver Cow Party(最短路径)
- poj 3268 Silver Cow Party(最短路径)
- POJ3268---Silver Cow Party (最短路径)
- [POJ](3268)Silver Cow Party ---最短路径(图)
- Silver Cow Party (SPFA+最短路径)
- POJ 3268 Silver Cow Party(最短路径dijkstra算法)
- POJ 3268:Silver Cow Party 求单点的来回最短路径
- 【洛谷】1821 [USACO07FEB]银牛派对Silver Cow Party 最短路径
- POJ 3268 Silver Cow Party(最短路径之迪杰斯特拉算法)
- POJ3268—Silver Cow Party
- POJ3268—Silver Cow Party
- POJ3268—Silver Cow Party(反向最短路)
- POJ3258——Silver Cow Party
- 刷题——Silver Cow Party POJ
- 最短路径__Silver Cow Party ( Poj 3268 )
- POJ3268————Silver Cow Party(最短路)
- EditeText输入字母自动转大写
- Callable,Runnable比较及用法
- latex生成流程
- Apache Shiro 使用手册(三)Shiro 授权
- Hexo搭建Github Pages托管的静态个人博客
- 北大ACM3268——Silver Cow Party~~最短路径
- [@(value) description] 的妙用NSStringFromValue
- 【OAuth2.0学习笔记一】原理介绍
- java如何遍历Map<String, ArrayList> map = new HashMap<String, ArrayList>();
- java IO 输入输出
- C#数组初始化详解
- 通过安卓应用获取任意蓝牙设备的MAC地址
- 使用pdf转换器转换文件的方法
- Apache Shiro 使用手册(四)Realm 实现