T1992 聚会 codevs
http://codevs.cn/problem/1992/
小S 想要从某地出发去同学k的家中参加一个party,但要有去有回。他想让所用的
时间尽量的短。但他又想知道从不同的点出发,来回的最短时间中最长的时间是多
少,这个任务就交给了你
第一行三个正整数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
输出从不同的节点出发的最短时间中最长的时间
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
#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的更多相关文章
- codevs 1992 聚会
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小S 想要从某地出发去同学k的家中参加一个party,但要有去有回.他想让所用的 ...
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- codevs 1052 地鼠游戏
1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
随机推荐
- SDUT_2146:最小子序列和
题目描述 给你一个长为n(10<=n<=10000)的数组,数组中的每一个数大于等于1小于等于1000000.请你找出一个长为k(1<=k<=1000)的子序列.找序列时,假如 ...
- docker环境安装
centos7安装docker环境 # step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 ...
- git-忽略文件改动不进行提交
命令:git update-index --assume-unchanged 文件名 作用:忽略文件的改动,但是不加入.gitignore 文件中,这样可以达到仅在本地目录中忽略,不影响其他团队成员的 ...
- 【简●解】[SDOI2008] Sue的小球
[简●解][SDOI2008] Sue的小球 计划着刷\(DP\)题结果碰到了这样一道论文题,幸好不是太难. [题目大意] 口水话有点多,所以就直接放链接.传送门 [分析] 看到题首先联想到了曾经做过 ...
- 【简●解】[HAOI2007] 理想的正方形
[简●解][HAOI2007] 理想的正方形 可恶的\(DP\). [题目大意] 有一个\(a*b\)的整数组成的矩阵,现请你从中找出一个\(n*n\)的正方形区域,使得该区域所有数中的最大值和最小值 ...
- HDU-5253-链接的管道
http://acm.hdu.edu.cn/showproblem.php?pid=5253 #include <iostream> #include <bits/stdc++.h& ...
- Spoj8093 Sevenk Love Oimaster
题目描述 题解: 对于所有n串建广义后缀自动机. (广义后缀自动机唯一区别就是每次将las附成1,并不需要在插入时特判) 建完后再建出parent树,然后用dfs序+树状数组搞区间不同种类. 其实就是 ...
- 如何用纯 CSS 创作文本滑动特效的 UI 界面
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QrxxaW 可交互视频教 ...
- VS2013环境下Boost库配置
序言 最近了解各大互联网公司的校招要求,发现了解Boost程序库也是不可或缺的一部分~ 于是,决定潜心研究下,这个准标准库~ 首先,在官网下载boost的最新版本Boost 1.59.0,这是当前的最 ...
- [工具]Visual Studio
1,Tab键的使用: 如不说有这样的代码:public Member member { get; set; } 当我们编辑完Member后,按一下Tab键,就能够将光标锁定到member上,等待键盘输 ...