| 比赛 |
寒假集训2 |
评测结果 |
WAAWAWWAAAWAAAAAAAAA |
| 题目名称 |
回家路线 |
最终得分 |
75 |
| 用户昵称 |
ChenBp |
运行时间 |
1.580 s |
| 代码语言 |
C++ |
内存使用 |
7.50 MiB |
| 提交时间 |
2026-02-25 12:03:36 |
显示代码纯文本
#include <iostream>
#include <queue>
#include <vector>
#include <utility>
#include <cstring>
using namespace std;
const int N=1e5+5;
int n,m,A,B,C;
struct node {
int y,p,q;
};
vector<node>ve[N];
int dis[N];
bool vis[N];
int main() {
freopen("rout.in","r",stdin);
freopen("rout.out","w",stdout);
cin>>n>>m>>A>>B>>C;
for(int i=1; i<=m; i++) {
int x,y,p,q;
cin>>x>>y>>p>>q;
ve[x].push_back({y,p,q});
}
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
if(A==0&&B==0&&C==0) {
priority_queue<pair<int,int>>p;
p.push(make_pair(0,1));
while(!p.empty()) {
auto now=p.top();
p.pop();
int u=now.second;
if(vis[u]) continue;
vis[u]=1;
for(auto i:ve[u]) {
if(i.p<dis[u]) continue;
int v=i.y;
if(i.q<dis[v]) {
dis[v]=i.q;
p.push(make_pair(-dis[v],v));
}
}
}
cout<<dis[n];
return 0;
}
priority_queue<pair<pair<int,int>,int>>p;
p.push(make_pair(make_pair(0,0),1));
while(!p.empty()) {
auto now=p.top();
p.pop();
int u=now.second,t=-now.first.second;
if(vis[u]) continue;
vis[u]=1;
for(auto i:ve[u]) {
if(i.p<t) continue;
int v=i.y;
int d=i.p-t;
int x=A*d*d+B*d+C;
x+=i.q-t;
if(dis[u]+x<dis[v]) {
dis[v]=dis[u]+x;
p.push(make_pair(make_pair(-dis[v],-i.q),v));
}
}
}
cout<<dis[n];
return 0;
}