codevs 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 <iostream>
#include <cstring> using namespace std; bool vis[];
int ans,n,m,k,i,j,x[],y[],w[],tot,dis1[],dis2[],atlas[][];
void Dijkstra1(int pos)
{
for(i=;i<=n;++i)
{
dis1[i]=atlas[pos][i];
vis[i]=;
}
vis[pos]=;
dis1[pos]=;
for(int k=;k<n;++k)
{
int minx=0x7fffffff,gx;
for(i=;i<=n;++i)
{
if(dis1[i]<minx&&!vis[i])
{
minx=dis1[i];gx=i;
}
}
vis[gx]=;
for(i=;i<=n;++i)
{
if(dis1[i]>atlas[gx][i]+dis1[gx])
dis1[i]=atlas[gx][i]+dis1[gx];
}
}
}
void Dijkstra2(int pos)
{
for(i=;i<=n;++i)
{
dis2[i]=atlas[pos][i];
vis[i]=;
}
vis[pos]=;
dis2[pos]=;
for(int k=;k<n;++k)
{
int minx=0x7fffffff,gx;
for(i=;i<=n;++i)
{
if(dis2[i]<minx&&!vis[i])
{
minx=dis2[i];gx=i;
}
}
vis[gx]=;
for(i=;i<=n;++i)
{
if(dis2[i]>atlas[gx][i]+dis2[gx])
dis2[i]=atlas[gx][i]+dis2[gx];
}
}
}
int main()
{
memset(atlas,,sizeof(atlas));
cin>>n>>m>>k;
int h=;
for(i=;i<=m;++i)
{
cin>>x[i]>>y[i]>>w[i];
h+=w[i];
atlas[x[i]][y[i]]=min(atlas[x[i]][y[i]],w[i]);
}
Dijkstra1(k);
memset(atlas,,sizeof(atlas));
for(i=;i<=m;++i)
atlas[y[i]][x[i]]=min(atlas[y[i]][x[i]],w[i]);
Dijkstra2(k);
for(i=;i<=n;++i)
{
if(dis1[i]<=h*&&dis2[i]<=h*)//相当于贪心一下,如果dis1好dis2值小于所有边权之和的两倍,代表连通。
ans=max(ans,dis1[i]+dis2[i]);
}
cout<<ans;
return ;
}
codevs 1992 聚会的更多相关文章
- T1992 聚会 codevs
http://codevs.cn/problem/1992/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小S 想要从某地 ...
- 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 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
随机推荐
- Python学习资源汇总
Python 简明教程 (入门必看) * 在线浏览: http://woodpecker.org.cn/abyteofpython_cn/chinese/ Python Tutorial 简体中文版 ...
- 性能测试之Jmeter学习(四)
本节主要讲解:如何创建Web测试计划 如何创建一个简单的测试计划,用于测试web站点? 1.明确测试需求:我们会模拟5个并发用户,对Jakarta Web站点的网个页面进行访问,另外每个并发用户都会运 ...
- B - Alyona and Mex
Description Someone gave Alyona an array containing n positive integers a1, a2, ..., an. In one oper ...
- 总结open与fopen的区别
https://www.zybuluo.com/yiltoncent/note/87461 参考链接1 参考链接2 对于这两个名字很类似的函数,对于很多初学者来说,不容易搞清楚它们有什么不同,只知道按 ...
- 创建Sitemap文件供搜索引擎使用
以下内容转载自 http://www.cnblogs.com/webtrados/archive/2009/12/29/1635305.html 如何创建Sitemap文件 Sitemap的格式有XM ...
- Ubuntu18.04安装和配置Java JDK11并卸载自带OpenJDK
卸载自带的OpenJDK方法: 在终端执行命令:sudo apt-get remove openjdk* Ubuntu18.04安装JDK11.0.2 前面步骤一样,可参考:https://www.c ...
- 看后端程序员调试CORS的姿势
# 目录 为什么有同源策略? 需要解决的问题 CORS跨域请求方案 preflight withCredentials 附:高效.优雅地调试CORS实现 为什么有同源策略? 同源策略Sam ...
- E20181121-hm
invoke vt. 乞灵,祈求; 提出或授引…以支持或证明; 召鬼; 借助
- CodeForces 653A【水】
sort一发,去重 #include<cstdio> #include<iostream> #include<queue> #include<string.h ...
- 求N!的长度【数学】
转自:http://blog.csdn.net/fengdian29147001/article/details/11992755 给一个数X,len=log10(X)+1就是X这个数的长度 ①:当N ...