CF95C Volleyball
题意翻译
给出一个图,双向边,边上有权值代表路的距离,然后每个点上有两个值,t,c,t代表能从这个点最远沿边走t,且不能在半路下来,花费是c 现在告诉你起点终点,问最少的花费 点个数1000,边个数1000,边权1e9
By @partychicken
题目描述
Petya loves volleyball very much. One day he was running late for a volleyball match. Petya hasn't bought his own car yet, that's why he had to take a taxi. The city has n n n junctions, some of which are connected by two-way roads. The length of each road is defined by some positive integer number of meters; the roads can have different lengths.
Initially each junction has exactly one taxi standing there. The taxi driver from the i i i -th junction agrees to drive Petya (perhaps through several intermediate junctions) to some other junction if the travel distance is not more than ti t_{i} ti meters. Also, the cost of the ride doesn't depend on the distance and is equal to ci c_{i} ci bourles. Taxis can't stop in the middle of a road. Each taxi can be used no more than once. Petya can catch taxi only in the junction, where it stands initially.
At the moment Petya is located on the junction x x x and the volleyball stadium is on the junction y y y . Determine the minimum amount of money Petya will need to drive to the stadium.
输入输出格式
输入格式:
The first line contains two integers n n n and m m m ( 1<=n<=1000,0<=m<=1000) 1<=n<=1000,0<=m<=1000) 1<=n<=1000,0<=m<=1000) . They are the number of junctions and roads in the city correspondingly. The junctions are numbered from 1 1 1 to n n n , inclusive. The next line contains two integers x x x and y y y ( 1<=x,y<=n 1<=x,y<=n 1<=x,y<=n ). They are the numbers of the initial and final junctions correspondingly. Next m m m lines contain the roads' description. Each road is described by a group of three integers ui u_{i} ui , vi v_{i} vi , wi w_{i} wi ( 1<=ui,vi<=n,1<=wi<=109 1<=u_{i},v_{i}<=n,1<=w_{i}<=10^{9} 1<=ui,vi<=n,1<=wi<=109 ) — they are the numbers of the junctions connected by the road and the length of the road, correspondingly. The next n n n lines contain n n n pairs of integers ti t_{i} ti and ci c_{i} ci ( 1<=ti,ci<=109 1<=t_{i},c_{i}<=10^{9} 1<=ti,ci<=109 ), which describe the taxi driver that waits at the i i i
-th junction — the maximum distance he can drive and the drive's cost.
The road can't connect the junction with itself, but between a pair of
junctions there can be more than one road. All consecutive numbers in
each line are separated by exactly one space character.
输出格式:
If taxis can't drive Petya to the destination point, print "-1" (without the quotes). Otherwise, print the drive's minimum cost.
Please do not use the %lld specificator to read or write 64-bit
integers in С++. It is preferred to use cin, cout streams or the %I64d
specificator.
输入输出样例
4 4
1 3
1 2 3
1 4 1
2 4 1
2 3 5
2 7
7 2
1 2
7 7
9
说明
An optimal way — ride from the junction 1 to 2 (via junction 4), then from 2 to 3. It costs 7+2=9 bourles.
Solution:
本题水。
点数很小,先从每个点暴力最短路处理出该点的t范围内能到的点,并且建一张新图,然后只要在新图上再跑一遍最短路就好了。
代码:
/*Code by 520 -- 8.21*/
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
using namespace std;
const int N=;
int n,m,s,t,a[N],b[N];
int to[N],net[N],w[N],h[N],cnt;
int To[N],Net[N],W[N],H[N],Cnt;
ll dis[N];
bool vis[N];
struct node{
int u;
ll d;
bool operator<(const node &a)const{return d>a.d;}
}; int gi(){
int a=;char x=getchar();
while(x<''||x>'')x=getchar();
while(x>=''&&x<='')a=(a<<)+(a<<)+(x^),x=getchar();
return a;
} il void add(int u,int v,int c){to[++cnt]=v,net[cnt]=h[u],w[cnt]=c,h[u]=cnt;} il void Add(int u,int v,int c){To[++cnt]=v,Net[cnt]=H[u],W[cnt]=c,H[u]=cnt;} queue<int>q;
il void spfa(int x){
For(i,,n) dis[i]=;
q.push(x),dis[x]=;
while(!q.empty()){
int u=q.front();q.pop();vis[u]=;
for(RE int i=h[u];i;i=net[i])
if(dis[to[i]]>dis[u]+w[i]){
dis[to[i]]=dis[u]+w[i];
if(!vis[to[i]])q.push(to[i]),vis[to[i]]=;
}
}
For(i,,n) if(i!=x&&dis[i]<=a[x]) Add(x,i,b[x]);
} priority_queue<node>Q;
il void dij(){
For(i,,n) dis[i]=;
dis[s]=,Q.push(node({s,}));
while(!Q.empty()){
node x=Q.top();Q.pop();
if(!vis[x.u]){
vis[x.u]=;
for(RE int i=H[x.u];i;i=Net[i])
if(dis[To[i]]>dis[x.u]+W[i]){
dis[To[i]]=dis[x.u]+W[i];
if(!vis[To[i]]) Q.push(node({To[i],dis[To[i]]}));
}
}
}
} il void init(){
n=gi(),m=gi(),s=gi(),t=gi();
int u,v,c;
For(i,,m) u=gi(),v=gi(),c=gi(),add(u,v,c),add(v,u,c);
For(i,,n) a[i]=gi(),b[i]=gi();
cnt=;
For(i,,n) spfa(i);
dij();
cout<<(dis[t]==?-:dis[t]);
} int main(){
init();
return ;
}
CF95C Volleyball的更多相关文章
- CF 96 D. Volleyball
D. Volleyball http://codeforces.com/contest/96/problem/D 题意: n个路口,m条双向路,每条长度为w.每个路口有一个出租车司机,最多可以乘坐这辆 ...
- Codeforces 96D Volleyball(最短路径)
Petya loves volleyball very much. One day he was running late for a volleyball match. Petya hasn't b ...
- Codeforces 95C Volleyball(最短路)
题目链接:http://codeforces.com/problemset/problem/95/C C. Volleyball time limit per test 2 seconds memor ...
- Codeforces Beta Round #77 (Div. 1 Only) C. Volleyball (最短路)
题目链接:http://codeforces.com/contest/95/problem/C 思路:首先dijkstra预处理出每个顶点到其他顶点的最短距离,然后如果该出租车到某个顶点的距离小于等于 ...
- *[hackerrank]Volleyball Match
https://www.hackerrank.com/contests/w1/challenges/volleyball-match 此题不错,首先可以看出是DP,S(x, y)= S(x - 1, ...
- CF - 96D - Volleyball
题意:一个无向图,有n个点,m条边,每条边有距离w,每个点有两个属性(1.从这点出发能到的最远距离,2.从这点出发的费用(不论走多远都一样)),一个人要从点x到点y,问最小费用是多少. 题目链接:ht ...
- 【日常训练】Volleyball(CodeForces-96D)
题意与分析 这题也是傻逼题,可是我当时打比赛的时候板子出问题了- -|||,怎么调也调不过. 不过思路是很清晰的:先做n次dijkstra然后重新建图,建完了以后根据新的单向图再跑一次dijkstra ...
- 【codeforces 95C】Volleyball
[题目链接]:http://codeforces.com/problemset/problem/95/C [题意] 给你n个点,m条边; 每个点有一辆出租车; 可以到达离这个点距离不超过u的点,且在这 ...
- mongo学习笔记(一):增删改查
安装:我是按这篇来弄的 一.Insert 1.db.person.insert({"name":"jack","age":20}) 2.va ...
随机推荐
- OOCSS(面向对象的CSS)总结
按钮样式库:buttons.css /* vue */ [v-cloak]{display: none} /* 滚动条 */ ::-webkit-scrollbar { width: 6px; hei ...
- 【Dojo 1.x】笔记5 使用本地引用
习惯用CDN引用的同学肯定会知道还有一种叫本地引用,这篇笔记测试本地引用. Dojo SDK下载地址:点我 下载中间的Release Package即可,如果希望下载完整包(Full Source), ...
- java线程介绍
文章讲解要点 1.线程创建几种方式2.线程常见设置方法,包括优先级.优先级休眠.停止等3.多线程间的数据交互与锁机制4.项目源码下载 线程介绍.png 一.线程创建方式 常见的线程创建方法以下三种 ...
- windows下QT打包
1.找到对应的MinGW命令,打开 2.进入exe目录 3.执行windeployqt XX.exe
- gitbook 入门教程之插件介绍
插件是 gitbook 的扩展功能,很多炫酷有用的功能都是通过插件完成的,其中插件有官方插件和第三方插件之分. 推荐官方插件市场 https://plugins.gitbook.com/ 寻找或下载相 ...
- Elasticsearch源码分析 - 源码构建
原文地址:https://mp.weixin.qq.com/s?__biz=MzU2Njg5Nzk0NQ==&mid=2247483694&idx=1&sn=bd03afe5a ...
- 前后端分离djangorestframework——ContentType组件表
ContentType ContentType其实django自带的,但是平时的话很少会用到,所以还是放在Djangorestframework这个部分 作用: 在实际的开发中,由于数据库量级大,所以 ...
- SQL 使用临时表和临时变量完成update表字段---实际案例
-- 使用临时表 -- 创建临时表 --ALTER TABLE TS_ExpenseApplication_Reim_Detail ADD BgCode NVARCHAR() NULL, BgItem ...
- Session, Token, OAuth 鉴权那些事儿
鉴权那些事 整体思路 无论什么样的服务, Web 服务总是不能绕开鉴权这个话题的, 通过有效的鉴权手段来保护网站数据, 来为特定用户提供服务. 整体来说, 有三种方式: Session-Cookie ...
- docker容器日志收集方案(方案N,其他中间件传输方案)
由于docker虚拟化的特殊性导致日志收集方案的多样性和复杂性下面接收几个可能的方案 这个方案各大公司都在用只不过传输方式大同小异 中间件使用kafka是肯定的,kafka的积压与吞吐能力相当强悍 ...