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 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
随机推荐
- stdout引发的curl 302跳转 crash
重现步骤: 0.开发环境:Windows 7 SP1 64bit, VS2008 SP1 1.进程中修改了stdout这个句柄的值:调用了prinft和cout都会修改stdout,TRACE不会修改 ...
- Qt教程
https://blog.csdn.net/louis_815/article/details/54286544 软件下载:http://download.qt.io/ https://blog.cs ...
- Android调试之TraceView
TraceView 在应用运行时,可以使用Debug类打开操作日志记录功能,打开后Android会详细记录应用花在每个线程以及线程的每个函数的调用时间.操作日志记录完毕后,可以使用Android SD ...
- TypeScript完全解读(26课时)_2.TypeScript完全解读-基础类型
2.TypeScript完全解读-基础类型 src下新建example文件夹并新建文件.basic-type.ts.截图中单词拼错了.后需注意一下是basic-type.ts 可以装tslint的插件 ...
- ubuntu 安装 lamp 和配置虚拟机
1:sudo passwd root #设定root密码 su 切换 exit 退出 ,或者 普通用户下 加sudo 2:sudo apt-get update #更新软件列表 3:sudo ...
- c#重写 重载
重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数.类型都完全一致时,就称子类中的这个方法重写了父类中的方法. 重写:通常,派生类继承基类的方法.因此,在调用对象继承方法的时候, ...
- ASP.NET Response.Cookies
//设置cookie Response.Cookies["loginPage"].Value = "login.aspx"; //命名并给值 Response. ...
- HDU2604【矩阵快速幂】
思路: 把fm看成01,f-1,m-0: 不能存在101,111; dp[i]代表第i结尾的方案数: ①:结尾是0一定行:只要i-1序列里添个0就好了,dp[i]+=dp[i-1]: ②:结尾是1 ...
- U3D手游《苍穹变》性能优化经验谈
4月11日,由unity公司举办的Unite 2016大会在上海正式举行,在4月12日的案例分享专场会议上,天神互动U3D高级开发工程师康凯以手游<苍穹变>为例讲述了3DMMOARPG游戏 ...
- 51nod1093(推公式&找規律)
題目鏈接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1093 題意:中文題誒- 思路:xjb 一開始死活想不出怎麼將一 ...