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 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
随机推荐
- 后端开发-Mybatis开发之一
2018-12-29 Mybatis简单开发:我是在eclipse上进行Java项目开发 目录结构如下: 内容如下: mysql.sql: 用于创建测试用的数据库以及表: 可以直接导入mys ...
- nodejs mac启动相关命令
redis: redis directory/src/redis-server redis-directory/redis.conf & mongodb: mongod &
- 梦工厂实验室 蛇形填数 dfs
问题 D: 蛇形填数 时间限制: 3 Sec 内存限制: 64 MB提交: 28 解决: 5[提交][状态][讨论版] 题目描述 在n*n方阵里填入1,2,...,n*n,要求填成蛇形.例如n=4 ...
- 网络编程-TCP连接-readLine
Server: package com.net.tcp; import java.io.BufferedReader; import java.io.IOException; import java. ...
- E20190402-hm
porxy n. 代理服务器; 代表权; 代理人,代替物; 委托书; enroll v. 招收; 注册; 登记; 加入; enrollment n. 注册; 登记; 入会;
- CodeForces Canada Cup 2016【A,B,C,D】
CodeForces 725A: 思路就是如果"最左"不是'>'这个了,那么这个右边的一定不可能到达左边了: 同理最右: CodeForces 725B: 有两个空姐,一个从 ...
- Memcached 查看帮助
进入到memcached目录, 输入命令: memcached -h 即可查看帮助 -p<num>要侦听的TCP端口号(默认值:11211) -u<num>udp监听端口号(默 ...
- vm安装mac
需要 vm虚拟机:vm10 mac系统: mac10.9 vm安装mac补丁 : unlokc-all-v120 vm tools for mac10.9: darwin6.0.3.iso ...
- opengl VAO ,VBO
A Vertex Array Object (VAO) is an object which contains one or more Vertex Buffer Objects and is des ...
- Codevs 1425 最长公共子串
1425 最长公共子串 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 输入N(2<=N<= ...