cdoj914-方老师分身 I 【dijkstra】
http://acm.uestc.edu.cn/#/problem/show/914
方老师分身 I
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
方老师为了开更多讲座,于是他分身了!早上他都在某一个教室分身,然后各个分身分别赶去各个不同的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 |
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】的更多相关文章
- UESTC_方老师分身 I CDOJ 914
方老师分身 I Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- UESTC_方老师的分身 II CDOJ 915
方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC 898 方老师和缘分 --二分图匹配+强连通分量
这题原来以为是某种匹配问题,后来好像说是强连通的问题. 做法:建图,每个方老师和它想要的缘分之间连一条有向边,然后,在给出的初始匹配中反向建边,即如果第i个方老师现在找到的是缘分u,则建边u-> ...
- cdoj 851 方老师与素数 bfs
方老师与素数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- UESTC_方老师和农场 2015 UESTC Training for Graph Theory<Problem L>
L - 方老师和农场 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_方老师买表 CDOJ 885
老师买表 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Stat ...
- UESTC - 900 方老师炸弹 —— 割点
题目链接:https://vjudge.net/problem/UESTC-900 方老师炸弹 Time Limit: 4000/2000MS (Java/Others) Memory L ...
- UESTC 914 方老师的分身I Dijkstra
题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...
- UESTC 915 方老师的分身II --最短路变形
即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大 ...
随机推荐
- coredns 编译模式添加插件
备注: coredns 默认已经安装了一些插件,比如大家用的多的kubernetes etcd ... 但是我们可以自己编译插件,构建我们自己的 coredns 版本,方便集成使用 1. 项目结 ...
- Mathtype启动失败与Microsoft公式编辑器Equation的问题处理案例
最近写毕业论文需要使用Mathtype,安装成功后,启动Word,使用Mathtype,出现各种问题. 遇到的问题: 1.弹出“用于创建对象的程序是Equation.您的计算机尚未安装此程序.若要编辑 ...
- Java多线程编程核心技术,第一章
1,Java并发--详解this与Thread.currentThread()的区别:https://blog.csdn.net/championhengyi/article/details/7666 ...
- php通过Mysqli和PDO连接mysql数据详解
前言 在实际开发中,关于数据库操作类,很少是自己去写,大多是通过一些框架去实现,突然自己去写,还是需要借阅手册之类,于是我觉得有必要去总结一下,php连接mysql的方法,php连接mysql,可以通 ...
- flv 解封装
#include <stdio.h> #include <stdlib.h> #include <string.h> #define DEBUG_INFO type ...
- java中FIle的用法
package com.a.b; import java.io.*; public class Cmo { public static void main(String[] args) throws ...
- Thread之六:线程创建方法
1.继承Thread类,重写该类的run()方法. 2.实现Runnable接口,并重写该接口的run()方法,该run()方法同样是线程执行体,创建Runnable实现类的实例,并以此实例作为Thr ...
- [转]Jsp 常用标签
<jsp:include> 动态引入,涉及到的多个 jsp 页面会翻译成多个 servlet 并在执行时合并. include 指令 是静态引入,涉及到的多个 jsp 页面会翻译成一个 s ...
- 项目中Map端数据处理不均匀性分析
Map任务的不均匀性 最近发现Map端数据越来越不均匀,而处理输入的数据,写到本地磁盘的数据量都差不多,我们随便拿出来两个attempt任务(当前map数量为64个),33和45,33的counter ...
- OSGi学习-总结
本文是osgi实战一书的前几章读书总结 1. OSGi简介 Java缺少对高级模块化的支持,为了弥补Java在模块化方面的不足,大多数管理得当的项目都会要求建立一整套技术,包括: 适应逻辑结构的编程 ...