ZJNU 1367 - Party--中高级
2024-10-08 15:38:50
寻找从i到X,再从X到i的最短路
可以在正向图中从X开始跑一遍最短路,每个点的距离dis1[i]当作从X回到点i的距离
再将图反向从X再跑一遍,每个点的距离dis2[i]当作从i到点X的距离
最后搜索dis1[i]+dis2[i]值最大的输出
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef pair<short,int> P;
vector<P> graph1[],graph2[];
int N,M,X,dis1[],dis2[];
bool vis1[],vis2[];
queue<short> q;
int main()
{
ios::sync_with_stdio();cin.tie();
int i,j,d,cnt,len,ans=;
short a,b,id;
cin>>N>>M>>X;
for(i=;i<M;i++)
{
cin>>a>>b>>d;
graph1[a].push_back(P(b,d));
graph2[b].push_back(P(a,d));
}
memset(dis1,INF,sizeof dis1);
memset(dis2,INF,sizeof dis2);
memset(vis1,false,sizeof vis1);
memset(vis2,false,sizeof vis2);
dis1[X]=dis2[X]=;
vis1[X]=vis2[X]=true;
q.push(X);
while(!q.empty())
{
id=q.front();
q.pop();
cnt=graph1[id].size();
for(i=;i<cnt;i++)
{
len=dis1[id]+graph1[id][i].second;
if(!vis1[graph1[id][i].first]||len<dis1[graph1[id][i].first])
{
dis1[graph1[id][i].first]=len;
vis1[graph1[id][i].first]=true;
q.push(graph1[id][i].first);
}
}
}
q.push(X);
while(!q.empty())
{
id=q.front();
q.pop();
cnt=graph2[id].size();
for(i=;i<cnt;i++)
{
len=dis2[id]+graph2[id][i].second;
if(!vis2[graph2[id][i].first]||len<dis2[graph2[id][i].first])
{
dis2[graph2[id][i].first]=len;
vis2[graph2[id][i].first]=true;
q.push(graph2[id][i].first);
}
}
}
for(i=;i<=N;i++)
{
if(i==X)
continue;
ans=max(ans,dis1[i]+dis2[i]);
}
cout<<ans; return ;
}
最新文章
- 计划任务,机器码与注册码,Web服务
- php操作Memcache
- Lucene的分析过程
- 自定义宏把Word打造成全快捷键编辑器
- Android activity之间传值关键性代码
- Struts2 的ModelDriven理解
- Ubuntu 14.10 下Ganglia监控Hadoop集群
- Linux批量杀进程
- BZOJ 3173 [Tjoi2013] 最长上升子序列 解题报告
- Linux用户与用户组,UID及GID
- List小练习
- java 对象与json互转
- go语言常用开源库整理
- 解析时间parse time
- JavaScript原型详解
- JS高级 - 面向对象1(this,Object ,工厂方式,new )
- 20180318 一个VS2015运行DataTable问题
- 《DSP using MATLAB》Problem 4.18
- ArcGIS10.3+Oracle12C+ArcGIS Server10.3安装布署(之一)
- Python简单的购物车小代码