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. COGS 2274. [HEOI 2016] tree

    ★☆   输入文件:heoi2016_tree.in   输出文件:heoi2016_tree.out   简单对比时间限制:1 s   内存限制:128 MB 这道题数据弱到炸了 . 第一次做用树刨 ...

  2. dialog - 从 shell 显示对话框

    总览 (SYNOPSIS) dialog --clear dialog --create-rc file dialog --print-maxsize dialog common-options bo ...

  3. uva1153 Keep the Customer Satisfied

    贪心加优先队列 (默认是小的在前,正好) //这里又很套路,设队列里的都是符合条件的考虑新加入的即可.再处理一下空队列的情况.很完美// 截止时间短的在前面,干的就多先根据截止日期排序优先队列根据完成 ...

  4. vc++创建多线程应用

    构建线程参数结构体: typedef struct { int nIndex; HANDLE hThread; int param1; ... }ThreadParam; 创建线程数组: Thread ...

  5. JavaScript设计模式基础之面向对象的JavaScript(二)

    多态 多态的实际含义:同一操作作用与不同的对象上面,可以产生不同的解释和不同的执行结果,就是说,给不同的对象发送同一个消息 的时候,这些对象会根据这个消息分别给出不同的反馈 代码如下: class D ...

  6. 牛客OI赛制测试赛2 A 无序组数

    链接:https://www.nowcoder.com/acm/contest/185/A来源:牛客网 题目描述 给出一个二元组(A,B) 求出无序二元组(a,b) 使得(a|A,b|B)的组数 无序 ...

  7. luogu 数列找不同-莫队

    https://www.luogu.org/problemnew/show/P3901 了解过莫队的人应该都清楚,莫队是一个优化的暴力,可以在相对暴力比较优的时间中,求出一段序列内的某些性质(例:数字 ...

  8. 高逼格关闭Win10防火墙

    作为一个开发人员,你还需要进入这个界面来关闭防火墙么? 如果是,那么现在,我将为大家介绍一种高逼格的方式: 第一步: 打开Windows PowerShell(管理员) 第二步:查看当前防火墙状态:n ...

  9. webpack之source map

    先来一个webpack小例子,项目结构如下: // greeter.js module.exports = function() { var greet = document.createElemen ...

  10. vue 源码自问自答-响应式原理

    vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...