POJ 3268 Silver Cow Party (最短路dijkstra)

时间:2023-02-04 02:16:59

Silver Cow Party

题目链接:

http://acm.hust.edu.cn/vjudge/contest/122685#problem/D

Description


One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big cow party to be held at farm #X (1 ≤ X ≤ N). A total of M (1 ≤ M ≤ 100,000) unidirectional (one-way roads connects pairs of farms; road i requires Ti (1 ≤ Ti ≤ 100) units of time to traverse.
Each cow must walk to the party and, when the party is over, return to her farm. Each cow is lazy and thus picks an optimal route with the shortest time. A cow's return route might be different from her original route to the party since roads are one-way.
Of all the cows, what is the longest amount of time a cow must spend walking to the party and back?

Input


Line 1: Three space-separated integers, respectively: N, M, and X
Lines 2.. M+1: Line i+1 describes road i with three space-separated integers: Ai, Bi, and Ti. The described road runs from farm Ai to farm Bi, requiring Ti time units to traverse.

Output


Line 1: One integer: the maximum of time any one cow must walk.

Sample Input


4 8 2
1 2 4
1 3 2
1 4 7
2 1 1
2 3 5
3 1 2
3 4 4
4 2 3

Sample Output


10

Hint


Cow 4 proceeds directly to the party (3 units) and returns via farms 1 and 3 (7 units), for a total of 10 time units.


##题意:

n个人分别住在1~n个点,他们要去某个点聚会并且结束后返回家中.
求每个人的最短路程. (往返路径可以不一样).


##题解:

先用dijkstra求出终点到所有点的最短路径(返程).
再沿着反向路径跑一次dijkstra,求出所有点到终点的最短路径.


##代码:
``` cpp
#include
#include
#include
#include
#include
#define mid(a,b) ((a+b)>>1)
#define LL long long
#define maxn 1010
#define inf 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;

int n,m;

int value[maxn][maxn];

int dis[maxn];

bool vis[maxn];

int dis2[maxn];

void dijkstra(int s) {

memset(vis, 0, sizeof(vis));

for(int i=1; i<=n; i++) dis[i] = inf;

dis[s] = 0;

for(int i=1; i<=n; i++) {
int p, mindis = inf;
for(int j=1; j<=n; j++) {
if(!vis[j] && dis[j]<mindis)
mindis = dis[p=j];
}
vis[p] = 1;
for(int j=1; j<=n; j++) {
if(dis[j] > dis[p]+value[p][j]) {
dis[j] = dis[p] + value[p][j];
}
}
}

}

void dijkstra2(int s) {

memset(vis, 0, sizeof(vis));

for(int i=1; i<=n; i++) dis2[i] = inf;

dis2[s] = 0;

for(int i=1; i<=n; i++) {
int p, mindis = inf;
for(int j=1; j<=n; j++) {
if(!vis[j] && dis2[j]<mindis)
mindis = dis2[p=j];
}
vis[p] = 1;
for(int j=1; j<=n; j++) {
if(dis2[j] > dis2[p]+value[j][p]) {
dis2[j] = dis2[p] + value[j][p];
}
}
}

}

int main(int argc, char const *argv[])

{

//IN;

int aim;
while(scanf("%d %d %d", &n,&m,&aim) != EOF)
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
value[i][j] = inf;
while(m--){
int u,v,w; cin>>u>>v>>w;
if(w < value[u][v]) value[u][v] = w;
} dijkstra(aim);
dijkstra2(aim); int ans = 0;
for(int i=1; i<=n; i++) if(dis[i]!=inf && dis2[i]!=inf)
ans = max(ans, dis[i]+dis2[i]); printf("%d\n", ans);
} return 0;

}

POJ 3268 Silver Cow Party (最短路dijkstra)的更多相关文章

  1. POJ 3268 Silver Cow Party 最短路—dijkstra算法的优化。

    POJ 3268 Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbe ...

  2. poj 3268 Silver Cow Party&lpar;最短路dijkstra)

    描述: One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the bi ...

  3. POJ 3268 Silver Cow Party (双向dijkstra)

    题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  4. POJ 3268 Silver Cow Party 最短路

    原题链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

  5. poj 3268 Silver Cow Party &lpar;最短路算法的变换使用 【有向图的最短路应用】 &rpar;

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13611   Accepted: 6138 ...

  6. POJ 3268 Silver Cow Party (最短路径)

    POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...

  7. POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】

    Silver Cow Party Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Su ...

  8. DIjkstra&lpar;反向边&rpar; POJ 3268 Silver Cow Party &vert;&vert; POJ 1511 Invitation Cards

    题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...

  9. POJ 3268 Silver Cow Party 单向最短路

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22864   Accepted: 1044 ...

随机推荐

  1. oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示例和 ...

  2. css3mediaquery移动端网页字体适应屏幕代码

    @media screen and (min-width:320px) and (max-width:321px) { html { font-size: 62.5%; } } @media scre ...

  3. 关于PKCS5Padding与PKCS7Padding的区别

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  4. 关于原生AJAX和jQueryAJAX的编程

    1.回顾传统Ajax开发步骤 ①:创建xmlHttpRequest对象 var xmlHttp = creatHttpRequest(); ②:绑定回调函数 xmlHttp.onreadystatec ...

  5. QVariant类学习(非常强大的类型,甚至能处理QMap&lt&semi;QString &comma;QVariant&gt&semi;)

    详细描述: QVariant类作为一个最为普遍的Qt数据类型的联合. 因为c++禁止没有构造函数和析构函数的联合体,许多继承的Qt类不能够在联合体当中使用.(联合体当中的变量共用一个存储区),没有了联 ...

  6. 解决Django&plus;Vue前后端分离的跨域问题及关闭csrf验证

      前后端分离难免要接触到跨域问题,跨域的相关知识请参:跨域问题,解决之道   在Django和Vue前后端分离的时候也会遇到跨域的问题,因为刚刚接触Django还不太了解,今天花了好长的时间,查阅了 ...

  7. ldap集成rabbitmq

    rabbitmq版本: 3.7.4 rabbitmq支持ldap需要开启插件:       rabbitmq-plugins enable rabbitmq_auth_backend_ldap rab ...

  8. &period;7-浅析express源码之Router模块&lpar;3&rpar;-app&lbrack;METHODS&rsqb;

    之前的讨论都局限于use方法,所有方式的请求会被通过,这一节讨论express内部如何处理特殊请求方法. 给个流程图咯~ 分别给出app.METHODS与router.METHODS: // app. ...

  9. Java NIO 之 Buffer&lpar;缓冲区&rpar;

    一 Buffer(缓冲区)介绍 Java NIO Buffers用于和NIO Channel交互. 我们从Channel中读取数据到buffers里,从Buffer把数据写入到Channels. Bu ...

  10. libxml2实例

    // libxmlTest.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #includ ...