P1218 过路费
奋斗了两天,终于写过了这道题......
这道题不仅要求最短路,还要加上路径上最大的点权;
先用结构体记录点的序号和点的值这是毋庸置疑的;再用另外一个数组来记录当前点权也是可以理解的,毕竟后面要排序;将点权从小到大排序也是为了求最短路;然后再输入每条边的权值;min是为了保证两点之间有重复的边而取最小值;n代表两边的最小值,l就加上了点权;Floyd先将两点相同时就是自己的点权;将点权从小到大枚举,用t来记录此时所对应的原来的序号;两边之间的最短路就用普通的方法,加上点权就要加上中间量k值的点权和两端i,j点权的最大值;最后输出就行了;
#include <bits/stdc++.h>
using namespace std;
inline int read() {
int x = ,ff = ;
char ch = getchar();
while(!isdigit(ch)) {
if(ch == '-') ff = -;
ch = getchar();
}
while(isdigit(ch)) {
x = (x<<) + (x<<) + (ch ^ );
ch = getchar();
}
return x * ff;
}
inline void write(int x) {
if(x < ) putchar('-'),x = -x;
if(x > ) write(x / );
putchar(x % + '');
}
int a,b,c,m[],n[][],l[][];
struct node {
int id;
int v;
} d[];
bool my(node x,node y) {
return x.v < y.v;
}
void Floyd() {
for(int i = ; i <= a; ++i)
l[i][i] = m[i];
for(int k = ; k <= a; ++k) {
int t = d[k].id;
for(int i = ; i <= a; ++i) {
for(int j = ; j <= a; ++j) {
n[i][j] = min(n[i][j],n[i][t] + n[t][j]);
l[i][j] = min(l[i][j],n[i][j] + max(d[k].v,max(m[i],m[j])));
}
}
}
}
int main() {
memset(n,0x3f,sizeof(n));
memset(l,0x3f,sizeof(l));
a = read();
b = read();
c = read();
for(int i = ; i <= a; ++i) {
d[i].v = read();
d[i].id = i;
m[i] = d[i].v;
}
sort(d + ,d + a + ,my);
for(int i = ; i <= b; ++i) {
int x,y,v;
x = read();
y = read();
v = read();
n[x][y] = min(n[x][y],v);
n[y][x] = min(n[y][x],v);
}
Floyd();
for(int i = ; i <= c; ++i) {
int x,y;
x = read();
y = read();
write(l[x][y]);
putchar('\n');
}
return ;
}
P1218 过路费的更多相关文章
- FZU Problem 2082 过路费 树链剖分
Problem 2082 过路费 Problem Description 有n座城市,由n-1条路相连通,使得任意两座城市之间可达.每条路有过路费,要交过路费才能通过.每条路的过路费经常会更新, ...
- Uva 10537 过路费
题目链接:http://vjudge.net/contest/143062#problem/C 题意: 给定一个无向图,大写字母是城市,小写字母是村庄,经过城市交过路费为当前货物的%5,路过村庄固定交 ...
- Floyd | | jzoj[1218] | | [Usaco2009 Dec]Toll 过路费 | | BZOJ 1774 | | 我也不知道该怎么写
写在前面:老师说这一道题是神题,事实上确实如此,主要是考察对Floyd的理解 ******************************题目.txt************************* ...
- 洛谷P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib
P1218 [USACO1.5]特殊的质数肋骨 Superprime Rib 284通过 425提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 超时怎么办? ...
- Fzu Problem 2082 过路费 LCT,动态树
题目:http://acm.fzu.edu.cn/problem.php?pid=2082 Problem 2082 过路费 Accept: 528 Submit: 1654Time Limit ...
- codevs 1519 过路费 最小生成树+倍增
/*codevs 1519 过路费 最小生成树+倍增*/ #include<iostream> #include<cstdio> #include<cstring> ...
- FZU 2082 过路费(树链剖分)
FZU 2082 过路费 题目链接 树链抛分改动边的模板题 代码: #include <cstdio> #include <cstring> #include <vect ...
- 1774: [Usaco2009 Dec]Toll 过路费
1774: [Usaco2009 Dec]Toll 过路费 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 263 Solved: 154[Submit ...
- BZOJ_1774_[Usaco2009 Dec]Toll 过路费_floyd
BZOJ_1774_[Usaco2009 Dec]Toll 过路费_floyd 题意: 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一 ...
随机推荐
- php操作xml的方法
xml源文件 <?xml version="1.0 encoding="UTF-8"?> <humans> <zhangying> & ...
- Javascript中没有引用传递,只有按值传递
很多人,包括我,受书本知识消化不彻底的影响,认为 JS 中参数有两种传递方式:数字.字符串等按值传递:数组.对象等按地址(引用)传递.对此种观点,我们要谨慎. var v1 = [] var v2 = ...
- error at ::0 can't find referenced pointcut pointCutName 错误解决方法
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire method: publi ...
- java工具类(四)之实现日期随意跳转
Java实现日期随意跳转 项目开发过程中.须要进行订单提醒日期的设置.主要包含设置每月指定的日期或者指定的天数,代码例如以下: public static String DateOperation(S ...
- 百度ai 基于node 语音识别 音频文件类型转换
百度ai 基于node 语音识别 音频文件类型转换 项目简介 源代码移步:https://github.com/xuess/ai-baidu-node 本项目主要功能为,本地音频语音识别和文件类型转换 ...
- python day- 6 is 和 ==的区别 encode 和 decode
1.is 和 == 的区别. == 是由来判断左右两边的内容是否相等. is 是用来判断内存地址是否相同. 引进 id ( )函数 小数据池: 对于字符串 ,数字 ,bool 值进行 id()计 ...
- lonlifeOJ1152 “玲珑杯”ACM比赛 Round #19 概率DP
E -- Expected value of the expression DESCRIPTION You are given an expression: A0O1A1O2A2⋯OnAnA0O1A1 ...
- archlinux yaourt安装 以及出错细节 database file for "archlinuxfr" does not exist.
archlinux yaourt安装 但一直报错如下: :: Synchronizing package databases... core is up to date extra is u ...
- xamarin.android listview绑定数据及点击事件
前言 listview是用来显示数据列表的一个控件,今天给大家带来如何使用cursor进行数据绑定以及点击事件. 导读 1.如何创建一个listview 2.如何使用cursor进行绑定数据 3.li ...
- ulink函数的使用【学习笔记】
#include "apue.h" #include <fcntl.h> int main(void) { ) err_sys("open error&quo ...