QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#412218 | #3788. Funny Car Racing | accept_ | 0 | 0ms | 0kb | C++17 | 1.3kb | 2024-05-16 10:30:24 | 2024-05-16 10:30:24 |
answer
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N=5e4+10;
int n,m,s,t,T,h[505],idx,e[N],ne[N],a[N],b[N],w[N],st[305],d[305];
void add(int u,int v,int aa,int bb,int ww){
e[++idx]=v;
a[idx]=aa;
b[idx]=bb;
w[idx]=ww;
ne[idx]=h[u];
h[u]=idx;
}
struct PII{
int pos,dis;
friend bool operator< (PII x,PII y){
return x.dis > y.dis;
}
};
void dijkstra(){
for(int i=0;i<=n;i++){
d[i]=1e9+100,st[i]=0;
}
priority_queue<PII>q;
q.push({0,s});
while(q.size()){
PII o=q.top();q.pop();
int x=o.pos,y=o.dis;
if(st[x])continue;
for(int i=h[x];i;i=ne[i]){
int v=e[i];
int dd=y%(a[i]+b[i]);
if(st[v])continue;
if(dd>=a[i]){//路口关闭
if(b[i]-(dd-a[i])+w[i]+y<d[v]){
d[v]=b[i]-(dd-a[i])+w[i]+y;
q.push({v,d[v]});
}
}
else{//路口开启
if(dd-a[i]>=w[i]&&w[i]+y<d[v]){//剩余时间可以恰好通过
d[v]=w[i]+y;
q.push({v,d[v]});
}
else if(dd-a[i]<w[i]&&a[i]+b[i]-dd+w[i]+y<d[v]){
d[v]=a[i]+b[i]-dd+w[i]+y;
q.push({v,d[v]});
}
}
}
}
printf("Case %d: %d\n",++T,d[t]);
}
int main(){
while(~scanf("%d%d%d%d",&n,&m,&s,&t)!=EOF){
int u,v,aa,bb,ww;
idx=0;
for(int i=1;i<=m;i++){
cin>>u>>v>>aa>>bb>>ww;
if(ww>aa)continue;
add(u,v,aa,bb,ww);
}
}
}
詳細信息
Test #1:
score: 0
Time Limit Exceeded
input:
155 9507 117 14 19 18 2 123 1 100 97 4 155 3 121 120 1 140 1 5 8 1 121 1 69 66 2 107 2 151 150 2 190 1 68 69 1 101 1 61 60 2 126 1 124 127 2 160 3 59 55 5 133 4 66 67 1 189 1 94 96 2 108 2 65 63 2 181 2 44 48 1 130 1 28 29 1 180 1 5 6 1 107 1 29 28 1 120 1 142 140 4 152 2 46 45 2 113 1 85 88 6 163 3...