QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#412218#3788. Funny Car Racingaccept_0 0ms0kbC++171.3kb2024-05-16 10:30:242024-05-16 10:30:24

Judging History

你现在查看的是最新测评结果

  • [2024-05-16 10:30:24]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [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...

output:


result: