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. [LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析

    本文原题: LeetCode. 给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数. 什么是二叉搜寻树? 二叉查找树(Binary Search Tree),或者是一棵 ...

  2. 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分

    题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...

  3. Maven使用中的常见问题整理

    1.更新eclipse的classpath加入新依赖  1.在dependencyManagement里面加入包括版本在内的依赖信息,如: <dependency> <groupId ...

  4. redis+php微博功能的redis数据结构设计总结(四)

    概述: 1.完全采用redis作为数据库实现微博的登录2.发布3.微博的显示4.实现整个功能使用了redis的string,list,hashes四个数据类型,以及string类型的数值自增功能 一. ...

  5. 关于如何利用Pocket CHM Pro制作帮助文档

    关于如何利用Pocket CHM Pro制作帮助文档 编写人:CC阿爸 2015-4-6 今天在这里,我想与大家一起分享如何利用Pocket CHM Pro制作软件系统的帮助文档,在此做个小结,以供参 ...

  6. 微软Azure平台 cloud service动态申请证书并绑定证书碰到的坑

    我们有一个saas平台 部分在azure的cloud service 使用lets encrypt来申请证书.每一个商家申请域名之后就需要通过Lets encrypt来得到证书并绑定证书. 主要碰到的 ...

  7. Java堆栈解析

    1.RAM和ROM区别RAM-RamdomAccessMemory随机存取存储器(断电后数据会丢失),高速存取,读写时间相等,且与地址无关,如计算机内存等. ROM-Read Only Memory只 ...

  8. SpringBoot运行报Address already in use: bind

    java.net.BindException: Address already in use: bind at sun.nio.ch.Net.bind0(Native Method) at sun.n ...

  9. java代码--------编写0懂啊PI之间求随机数的方法

    总结:其实每次运行,显示出来的结果个数是随机的. package com.mmm; //编写0到PI之间求随机数的方法 public class MEm { public static void ma ...

  10. [转]Jsp 常用标签

    <jsp:include> 动态引入,涉及到的多个 jsp 页面会翻译成多个 servlet 并在执行时合并. include 指令 是静态引入,涉及到的多个 jsp 页面会翻译成一个 s ...