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条边,所以大 ...
随机推荐
- python 抓取数据,pandas进行数据分析并可视化展示
感觉要总结总结了,希望这次能写个系列文章分享分享心得,和大神们交流交流,提升提升. 因为半桶子水的水平,一直在想写什么,为什么写,怎么写. 直到现在找到了一种好的办法: 1.写什么 自己手上掌握的,工 ...
- 莫名其妙的js基础学习!
JavaScript基本组成部分: 1,ECMAScript:js的语法标准,基本的变量,运算符,函数,if语句,for语句等 2,DOM:操作网页上的元素API,比如盒子的移动,变色,轮播图等. 3 ...
- Sqlite基础简介
1.什么是SQLite ? -> SQLite简介 SQLite 是一个进程内的库,是一种轻量级的.自给自足的.无服务器的.无需配置的,事务性的SQL数据库引擎.和他其他的数据库一样,SQLit ...
- java 类加载器体系结构
- git 修改提交说明 commit message
修改最近一次的提交说明 1.代码未推送到远程服务器 $ git commit --amend 此指令会打开文本编辑器,第二行就是提交说明,修改完后按 ctrl+x 退出,后面根据提示操作. 2.代码已 ...
- 1、spark集群搭建
前提:已经搭建完全分布式的Hadoop集群,请参看http://www.cnblogs.com/netbloomy/p/6660131.html 1.Scala2.12.1环境搭建 1).下载scal ...
- NAT功能测试
一.测试目标和功能: 1.内网设备可以访问外网的IP: 2.外网PC可以登录内网设备的telnet. 二.设备硬件结构 1.3135相当于交换机: 2.eth0.netra和业务网口通过内部端口连接3 ...
- Linux:WebServer(Nginx 虚拟主机配置与伪静态实现)
ps + 查看方式 | grep + 服务/端口/软件等:查看状态: 一.基本操作 Nginx 多用于商业系统: 一个端口只能被一个服务使用: Nginx 可以同时监听多个端口,也就是配置时, ...
- [Java][Web]解决 Request 的乱码
解决 get 提交的乱码 (手工处理) String username = request.getParameter("username"); username = new Str ...
- 第三章 k8s cluster环境创建
1 用如下方法安装指定版本的docker,但是我的环境会报错 # 安装rpm apt install rpm # 下载 RPM 包, docker 版本 wget https://download. ...