http://acm.uestc.edu.cn/#/problem/show/914

方老师分身 I

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
Submit Status

方老师为了开更多讲座,于是他分身了!早上他都在某一个教室分身,然后各个分身分别赶去各个不同的n个教室(当然每个教室都要有且只有一个分身)。晚上各个分身都赶回之前分身时的教室,合并成一个人(不需要同时回去)。但是教室间的路十分崎岖,而且是单向的。当然即便只是方老师的分身,那也是相当厉害的,每个分身都会走花费时间最少的路径。方老师想知道他往返走路时间最长的那个分身所花在走路上的时间。题目保证有路可走。

Input

第一行输入三个整数 n, m, x(1≤n≤1000, 1≤m≤100,000, 1≤x≤n)。表示有n个教室,m条路,x为方老师分身的地方。

接下来m行,每行三个数,u, v, t表示从教室u到教室v存在一条单向边,花费时间t(1≤t≤100)。

Output

输出一个整数,往返中走路时间最长的分身所花费的时间。

Sample input and output

Sample Input Sample Output
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

题解:两次dijkstra。第一次顺着来,第二次逆着来。这里对图的存储不适合前向星,适合矩阵存储,求逆着的边的时候更为方便。

代码:

 #include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <cstdio> using namespace std; const int INF=0x7fffffff;
const int N=;
const int M=;
int n,m,x;
int a[N][N];
int dis[N],dis2[N];
bool b[N];
typedef pair<int,int> pii;
priority_queue<pii,vector<pii>,greater<pii> >p; void dijkstra();
void dijkstra2(); int main()
{
//freopen("D:\\input.in","r",stdin);
//freopen("D:\\output.out","w",stdout);
int t1,t2,t3;
scanf("%d%d%d",&n,&m,&x);
for(int i=;i<m;i++){
scanf("%d%d%d",&t1,&t2,&t3);
a[t1][t2]=t3;
}
dijkstra();
dijkstra2();
t1=;
for(int i=;i<=n;i++) t1=max(t1,dis[i]+dis2[i]);
printf("%d\n",t1);
return ;
}
void dijkstra(){
for(int i=;i<=n;i++) dis[i]=INF;
dis[x]=;
p.push(make_pair(,x));
while(!p.empty()){
pii tp=p.top();
p.pop();
int tx=tp.second;
if(b[tx]) continue;
b[tx]=;
for(int i=;i<=n;i++){
if(a[tx][i]&&(!b[i])){
if(dis[i]>dis[tx]+a[tx][i]){
dis[i]=dis[tx]+a[tx][i];
p.push(make_pair(dis[i],i));
}
}
}
}
}
void dijkstra2(){
for(int i=;i<=n;i++) dis2[i]=INF;
memset(b,,sizeof(b));
dis2[x]=;
p.push(make_pair(,x));
while(!p.empty()){
pii tp=p.top();
p.pop();
int tx=tp.second;
if(b[tx]) continue;
b[tx]=;
for(int i=;i<=n;i++){
if(a[i][tx]&&(!b[i])){
if(dis2[i]>dis2[tx]+a[i][tx]){
dis2[i]=dis2[tx]+a[i][tx];
p.push(make_pair(dis2[i],i));
}
}
}
}
}

cdoj914-方老师分身 I 【dijkstra】的更多相关文章

  1. UESTC_方老师分身 I CDOJ 914

    方老师分身 I Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  2. UESTC_方老师的分身 II CDOJ 915

    方老师的分身 II Time Limit: 10000/5000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  3. UESTC 898 方老师和缘分 --二分图匹配+强连通分量

    这题原来以为是某种匹配问题,后来好像说是强连通的问题. 做法:建图,每个方老师和它想要的缘分之间连一条有向边,然后,在给出的初始匹配中反向建边,即如果第i个方老师现在找到的是缘分u,则建边u-> ...

  4. cdoj 851 方老师与素数 bfs

    方老师与素数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

  5. UESTC_方老师和农场 2015 UESTC Training for Graph Theory<Problem L>

    L - 方老师和农场 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  6. UESTC_方老师买表 CDOJ 885

    老师买表 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Stat ...

  7. UESTC - 900 方老师炸弹 —— 割点

    题目链接:https://vjudge.net/problem/UESTC-900   方老师炸弹 Time Limit: 4000/2000MS (Java/Others)     Memory L ...

  8. UESTC 914 方老师的分身I Dijkstra

    题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...

  9. UESTC 915 方老师的分身II --最短路变形

    即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...

随机推荐

  1. python 抓取数据,pandas进行数据分析并可视化展示

    感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为半桶子水的水平,一直在想写什么,为什么写,怎么写. 直到现在找到了一种好的办法: 1.写什么 自己手上掌握的,工 ...

  2. 莫名其妙的js基础学习!

    JavaScript基本组成部分: 1,ECMAScript:js的语法标准,基本的变量,运算符,函数,if语句,for语句等 2,DOM:操作网页上的元素API,比如盒子的移动,变色,轮播图等. 3 ...

  3. Sqlite基础简介

    1.什么是SQLite ? -> SQLite简介 SQLite 是一个进程内的库,是一种轻量级的.自给自足的.无服务器的.无需配置的,事务性的SQL数据库引擎.和他其他的数据库一样,SQLit ...

  4. java 类加载器体系结构

  5. git 修改提交说明 commit message

    修改最近一次的提交说明 1.代码未推送到远程服务器 $ git commit --amend 此指令会打开文本编辑器,第二行就是提交说明,修改完后按 ctrl+x 退出,后面根据提示操作. 2.代码已 ...

  6. 1、spark集群搭建

    前提:已经搭建完全分布式的Hadoop集群,请参看http://www.cnblogs.com/netbloomy/p/6660131.html 1.Scala2.12.1环境搭建 1).下载scal ...

  7. NAT功能测试

    一.测试目标和功能: 1.内网设备可以访问外网的IP: 2.外网PC可以登录内网设备的telnet. 二.设备硬件结构 1.3135相当于交换机: 2.eth0.netra和业务网口通过内部端口连接3 ...

  8. Linux:WebServer(Nginx 虚拟主机配置与伪静态实现)

    ps + 查看方式  |  grep  +  服务/端口/软件等:查看状态: 一.基本操作 Nginx 多用于商业系统: 一个端口只能被一个服务使用: Nginx 可以同时监听多个端口,也就是配置时, ...

  9. [Java][Web]解决 Request 的乱码

    解决 get 提交的乱码 (手工处理) String username = request.getParameter("username"); username = new Str ...

  10. 第三章 k8s cluster环境创建

    1  用如下方法安装指定版本的docker,但是我的环境会报错 # 安装rpm apt install rpm # 下载 RPM 包, docker 版本 wget https://download. ...