http://codevs.cn/problem/1992/

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
题目描述 Description

小S 想要从某地出发去同学k的家中参加一个party,但要有去有回。他想让所用的
时间尽量的短。但他又想知道从不同的点出发,来回的最短时间中最长的时间是多
少,这个任务就交给了你

输入描述 Input Description

第一行三个正整数n, m, k(n是节点个数,m是有向边的条数,k是参加聚会的地点
编号)( 1 ≤ n ≤ 1000 ,1 ≤ m ≤ 100,000)
第二行..m + 1行每行3个整数x,y,w 代表从x到y需要花w的时间 0<w<=100

输出描述 Output Description

输出从不同的节点出发的最短时间中最长的时间

样例输入 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

数据范围及提示 Data Size & Hint
 #include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define maxn 1e7
#define cnt 100015 using namespace std; int n,m,k,x,y,z,tot,ans,most;
int dis_go[cnt],head[cnt],dis_back[cnt];
bool vis[cnt];
struct node
{
int from,to,tim;
}e[cnt]; void add(int a,int b,int c)
{
tot++;
e[tot].to=b;
e[tot].tim=c;
e[tot].from=head[a];
head[a]=tot;
} int Spfa_go(int s,int t)
{
for(int i=;i<=n;i++) dis_go[i]=maxn;
dis_go[s]=;
memset(vis,,sizeof(vis));
queue<int>que;
que.push(s);
vis[s]=;
while(!que.empty())
{
int now=que.front();
que.pop(); vis[now]=;
for(int i=head[now];i!=-;i=e[i].from)
{
if(dis_go[e[i].to]>dis_go[now]+e[i].tim)
{
dis_go[e[i].to]=dis_go[now]+e[i].tim;
if(!vis[e[i].to])
{
que.push(e[i].to);
vis[e[i].to]=;
}
}
}
}
return dis_go[t];
} int Spfa_back(int s,int t)
{
for(int i=;i<=n;i++) dis_back[i]=maxn;
dis_back[s]=;
memset(vis,,sizeof(vis));
queue<int>q;
q.push(s);
vis[s]=;
while(!q.empty())
{
int now=q.front();
q.pop(); vis[now]=;
for(int i=head[now];i!=-;i=e[i].from)
{
if(dis_back[e[i].to]>dis_back[now]+e[i].tim)
{
dis_back[e[i].to]=dis_back[now]+e[i].tim;
if(!vis[e[i].to])
{
q.push(e[i].to);
vis[e[i].to]=;
}
}
}
}
return dis_back[t];
} int main()
{
scanf("%d%d%d",&n,&m,&k);
memset(head,-,sizeof(head));
for(int i=;i<=m;++i)
{
scanf("%d%d%d",&x,&y,&z);
most+=z;
add(x,y,z);
}
for(int i=;i<=n;++i)
{
if(i==k) continue;
tot=Spfa_go(i,k)+Spfa_back(k,i);
if(tot<most)
ans=max(ans,tot);
}
printf("%d",ans);
return ;
}

SPFA

T1992 聚会 codevs的更多相关文章

  1. codevs 1992 聚会

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 小S 想要从某地出发去同学k的家中参加一个party,但要有去有回.他想让所用的 ...

  2. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  3. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  4. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  5. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  6. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  7. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

  8. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  9. codevs 1052 地鼠游戏

    1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...

随机推荐

  1. Linux Mini 安装 VMware Tools

    1.挂载VMware Tools光盘 mount -t iso9660 /dev/cdrom /opt/ 2.安装依赖,安装Tools 将文件复制至 tmp目录解压VMwareTools-10.0.6 ...

  2. ML-学习提纲1

    http://www.sohu.com/a/130379077_468714 本文用一系列「思维导图」由浅入深的总结了「统计学」领域的基础知识,是对之前系列文章做的一次完整的梳理,也是我至今为止所有与 ...

  3. nginx 安全配置文档

    1.配置文档中有多处明确写出了nginx的配置文件路径,该路径是测试环境中的路径,线上系统的nginx配置文件与文档中所写的路径可能不一样,在进行相关配置时,应以线上配置文件的实际路径为准. 线上系统 ...

  4. 获取Java接口的所有实现类

    获取Java接口的所有实现类 前言:想看基于spring 的最简单实现方法,请直接看 第七步. 本文价值在于 包扫描的原理探究和实现 一.背景 项目开发中,使用Netty做服务端,保持长连接与客户端( ...

  5. OSI七层模型和TCP/IP五层模型详解

    OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范.OSI模型有7层结构,每层都可以有几个子层. OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 ...

  6. PHP中的正则

    概述 正则表达式是一种描述字符串结果的语法规则,是一个特定的格式化模式,可以匹配.替换.截取匹配的字符串. j简单的说就是通过一些规定的符号和字符组合成的一种语法规则 其实,只有了解一种语言的正则使用 ...

  7. 上海苹果维修点分享苹果电脑MACBOOK故障维修常见案例

    苹果的电子设备无论是外观和性能都是无与伦比的美丽,很多开发者都开始选用苹果电脑macbook.近年来苹果售后维修点来维修苹果电脑的用户也越来越多,我们上海苹果维修点就整理分享了一些苹果电脑MACBOO ...

  8. Uncaught ReferenceError: 板栗 is not defined at HTMLButtonElement.onclick (view:1)

    对JS传值一直以为都是随便传过去就行,直到今天遇到了中文传值的问题 中文传值不能够需要在调用的位置加 对于要传的值加单引号或者双引号 比如说下面这个样子,我这里还还记反斜杠注释 '<button ...

  9. LeetCode 304. Range Sum Query 2D – Immutable

    Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper lef ...

  10. NOI模拟赛(3.15) sequence(序列)

    Description 小A有N个正整数,紧接着,他打算依次在黑板上写下这N个数.对于每一个数,他可以决定将这个数写在当前数列的最左边或最右边.现在他想知道,他写下的数列的可能的最长严格上升子序列(可 ...