题目描述

原题来自:USACO 2007 Feb. Silver

N(1≤N≤1000)N (1 \le N \le 1000)N(1≤N≤1000) 头牛要去参加一场在编号为 x(1≤x≤N)x(1 \le x \le N)x(1≤x≤N) 的牛的农场举行的派对。有 M(1≤M≤100000)M(1\le M \le 100000)M(1≤M≤100000) 条有向道路,每条路长 Ti(1≤Ti≤100)T_i(1 \le T_i \le 100)T​i​​(1≤T​i​​≤100);每头牛都必须参加完派对后回到家,每头牛都会选择最短路径。求这 NNN 头牛的最短路径(一个来回)中最长的一条的长度。 特别提醒:可能有权值不同的重边。

输入格式

第 111 行:333 个空格分开的整数 N,M,XN,M,XN,M,X;

第 2…M+12 \ldots M+12…M+1 行:333 个空格分开的整数 Ai,Bi,TiA_i, B_i, T_iA​i​​,B​i​​,T​i​​,表示有一条从 AiA_iA​i​​ 到 BiB_iB​i​​ 的路,长度为 TiT_iT​i​​。

输出格式

一行一个数,表示最长最短路的长度。

样例

样例输入

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

样例输出

10

翻译题目,我们需要知道关于一个点,它到所有点的最短路以及所有点到它的最短路。
前者是最短路模板,后者是将所有边反着连,跑一边模板。
至于用Dijkstra还是SPFA,一看,没有负权边,向上看,我叫什么?
好了,用Dijkstra。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <queue>
#define in(a) a=read()
#define REP(i,k,n) for(int i=k;i<=n;i++)
#define MAXN 100010
using namespace std;
inline int read(){
int x=,f=;
char ch=getchar();
for(;!isdigit(ch);ch=getchar())
if(ch=='-')
f=-;
for(;isdigit(ch);ch=getchar())
x=x*+ch-'';
return x*f;
}
int n,m,s,ans=-;
int total1,head1[MAXN],to1[MAXN],nxt1[MAXN],val1[MAXN];
int total2,head2[MAXN],to2[MAXN],nxt2[MAXN],val2[MAXN];
int dis1[MAXN],vis1[MAXN];
int dis2[MAXN],vis2[MAXN];
struct node{
int a,b;
};
priority_queue<node> Q;
bool operator < (node x,node y){
return x.b > y.b;
}
inline void adl1(int a,int b,int c){
total1++;
to1[total1]=b;
val1[total1]=c;
nxt1[total1]=head1[a];
head1[a]=total1;
return ;
}
inline void adl2(int a,int b,int c){
total2++;
to2[total2]=b;
val2[total2]=c;
nxt2[total2]=head2[a];
head2[a]=total2;
return ;
}
void dijkstra1(){
dis1[s]=;
Q.push(node{s,});
while(!Q.empty()){
int u=Q.top().a;
Q.pop();
if(vis1[u]) continue;
vis1[u]=;
for(int e=head1[u];e;e=nxt1[e])
if(dis1[to1[e]]>dis1[u]+val1[e]){
dis1[to1[e]]=dis1[u]+val1[e];
Q.push(node{to1[e],dis1[to1[e]]});
}
}
return ;
}
void dijkstra2(){
dis2[s]=;
Q.push(node{s,});
while(!Q.empty()){
int u=Q.top().a;
Q.pop();
if(vis2[u]) continue;
vis2[u]=;
for(int e=head2[u];e;e=nxt2[e])
if(dis2[to2[e]]>dis2[u]+val2[e]){
dis2[to2[e]]=dis2[u]+val2[e];
Q.push(node{to2[e],dis2[to2[e]]});
}
}
return ;
}
int main(){
in(n),in(m),in(s);
int a,b,c;
REP(i,,m) in(a),in(b),in(c),adl1(a,b,c),adl2(b,a,c);
REP(i,,n) dis1[i]=dis2[i]=;
dijkstra1();
dijkstra2();
REP(i,,n) ans=max(ans,dis1[i]+dis2[i]);
cout<<ans;
}
 

poj3268 Silver Cow Party(农场派对)的更多相关文章

  1. POJ3268 Silver Cow Party(dijkstra+矩阵转置)

    Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15156   Accepted: 6843 ...

  2. POJ3268 Silver Cow Party —— 最短路

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

  3. POJ3268 Silver Cow Party Dijkstra最短路

    Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to atten ...

  4. POJ-3268 Silver Cow Party---正向+反向Dijkstra

    题目链接: https://vjudge.net/problem/POJ-3268 题目大意: 有编号为1-N的牛,它们之间存在一些单向的路径.给定一头牛的编号X,其他牛要去拜访它并且拜访完之后要返回 ...

  5. poj3268 Silver Cow Party(两次dijkstra)

    https://vjudge.net/problem/POJ-3268 一开始floyd超时了.. 对正图定点求最短,对逆图定点求最短,得到任意点到定点的往返最短路. #include<iost ...

  6. POJ3268 Silver Cow Party【最短路】

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...

  7. poj3268 Silver Cow Party(两次SPFA || 两次Dijkstra)

    题目链接 http://poj.org/problem?id=3268 题意 有向图中有n个结点,编号1~n,输入终点编号x,求其他结点到x结点来回最短路长度的最大值. 思路 最短路问题,有1000个 ...

  8. POJ3268 Silver Cow Party (建反图跑两遍Dij)

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...

  9. POj3268 Silver Cow Party

    http://poj.org/problem?id=3268 题目大意:求到x距离与从x返回和的最大值 从x点到各个点最短路好求,直接用Dijkstar,但从各个点到x点却不好求,只要把路向翻转过来也 ...

随机推荐

  1. 39 - 同步-异步-IO多路复用

    目录 1 同步与异步 2 阻塞与非阻塞 3 什么是IO 3.1 内核态用户态 3.2 IO两个阶段 3.3 IO模型 3.3.1 同步阻塞IO 3.3.2 同步非阻塞IO 3.3.3 IO多路复用 3 ...

  2. nginx_upstream_check_module-master对nginx的后端机器进行健康状态检查报403错误【转】

    在nginx.conf配置文件中 在server添加 location /nstatus { check_status; access_log off; #allow 192.168.2.11; #d ...

  3. WCF ServiceContract,OperationContract

    代码如下 [ServiceContract] //服务协定定义 using System.ServiceModel; public interface IInterface1 { [Operation ...

  4. kafka集群及监控部署

    1. kafka的定义 kafka是一个分布式消息系统,由linkedin使用scala编写,用作LinkedIn的活动流(Activity Stream)和运营数据处理管道(Pipeline)的基础 ...

  5. maxout激活函数

    maxout的拟合能力是非常强的,它可以拟合任意的的凸函数.最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),而maxout又是取k个隐隐含层节点的最大值,这些 ...

  6. 字体格式类型(.eot/.otf/.woff/.svg)

    @font-face语句是css中的一个功能模块,用于实现网页字体多样性的模块(设计者可随意指定字体,不需要考虑浏览者电脑上是否安装). @font-face文件 而由于网页中使用的字体类型,也是各浏 ...

  7. python之uinttest单元测试框架

    unittest,是python中针对单元测试的一个测试框架 相当于python版的junit 简单举个例子: 如图,使用时,测试类需要继承单元测试TestCase这个类 必须要有setUp()和te ...

  8. WEB前端 [编码] 规则浅析

    前言 说到前端安全问题,首先想到的无疑是XSS(Cross Site Scripting,即跨站脚本),其主要发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被 ...

  9. DOS命令大全(二)

    一般来说dos命令都是在dos程序中进行的,如果电脑中安装有dos程序可以从开机选项中选择进入,在windows 系统中我们还可以从开始运行中输入cmd命令进入操作系统中的dos命令,如下图: 严格的 ...

  10. 一步步教你编写不可维护的 PHP 代码

    译者注:这是一篇很棒文章,使用有趣的叙述方式,从反面讲解了作为一个优秀的 PHP 工程师,有哪些事情是你不能做的.请注意哦,此篇文章罗列的行为,都是你要尽量避免的. 随着失业率越来越高,很多人意识到保 ...