POJ 3268 牛的最长来回时间
来源:互联网 发布:域名需要几天 编辑:程序博客网 时间:2024/05/17 22:44
有编号为1-N的牛,它们之间存在一些单向的路径。给定一头牛的编号,其他牛要去拜访它并且拜访完之后要返回自己原来的位置,求这些牛中所花的最长的来回时间是多少。
每头牛返回的最短时间很简单就可以算出来,这相当于从目标牛为起点求单源最短路径。但每头牛出发到目标牛的最短时间无法直接算出来,稍微转换一下,发现这个最短时间其实可以通过把所有的边取反向,然后再从目标牛求一次单源最短路径得到。得到这两个最短路径之后,取它们的和的最大者即可。
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <cstdlib>#include <algorithm>#include <cmath>#include <vector>#include <set>#include <list>#include <queue>#include <map>using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF 0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-4#define maxn 100010#define MOD 1000000007int n,m,vis[1010];int edge[1010][1010];int dis[1010],dis1[1010];void dijkstra(int v0){ memset(dis,INF,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[v0] = 0; for(int i = 1; i <= n; i++) { int Min = INF,u; for(int j = 1; j <= n; j++) { if(!vis[j] && dis[j] < Min) { Min = dis[j]; u = j; } } vis[u] = 1; for(int j = 1; j <= n; j++) if(!vis[j] && dis[j] > dis[u] + edge[u][j]) dis[j] = dis[u] + edge[u][j]; }}int main(){ int t,c = 1,x; scanf("%d%d%d",&n,&m,&x); memset(edge,INF,sizeof(edge)); for(int i = 0; i < m; i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); edge[a][b] = c; } dijkstra(x); memcpy(dis1,dis,sizeof(dis)); for(int i = 1; i <= n; i++) for(int j = i+1; j <= n; j++) swap(edge[i][j],edge[j][i]); dijkstra(x); int ans = 0; for(int i = 1; i <= n; i++) { dis[i] += dis1[i]; ans = max(ans,dis[i]); } printf("%d\n",ans); return 0;}
0 0
- POJ 3268 牛的最长来回时间
- POJ3268 牛的最长来回时间(单源最短路径)
- poj 3268 单向最短路,来回路程~
- 本地时间和UTC时间的来回转换
- POJ 3268:Silver Cow Party 求单点的来回最短路径
- POJ 3268 Silver Cow Party (dijkstra来回最短路)
- POJ 3268 Silver Cow Party (来回最短路 SPFA)
- POJ 3268 Silver Cow Party (Dijkstra_来回)
- poj 3268(dijkstra变形---有向图来回最短路)
- poj3268牛的来回最短时(dijkstra)
- 字体的来回滑动
- 线程的来回切换
- 上网时间最长的人群
- oracle自定义函数示例--实现时间和数字的来回转换
- 【求一个点到各个点的来回花费和】POJ
- poj Silver Cow Party 3268 (来回单向最短路)好题
- poj 2385 来回走接苹果dp
- 最长上升子序列 nlogn时间复杂度 poj 2533
- 1019. 数字黑洞 (20)
- centos7引导项修复
- 树的最大独立集
- 百思学习笔记12-网络请求到推荐关注
- 王学岗高级控件滚动视图(一)
- POJ 3268 牛的最长来回时间
- android日常开发60条经验
- 浏览器加载和渲染HTML的顺序
- java学习心得——代码重铸
- C语言学习记录(一):关键的关键字
- 一年前的噩梦–记十年职业生涯最黑暗的项目经历
- markdown学习
- Hibernate中inverse="true"的理解
- NYOJ-102-次方求模