QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#405999#8627. 归程dingdingtang1151450 52ms215724kbC++145.7kb2024-05-06 18:31:372024-05-06 18:31:37

Judging History

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

  • [2024-05-06 18:31:37]
  • 评测
  • 测评结果:50
  • 用时:52ms
  • 内存:215724kb
  • [2024-05-06 18:31:37]
  • 提交

answer

#include <iostream>
#include <cstring> 
#include <map>
#include <vector>
#include <queue>
#include <cmath>
#include <algorithm>
#include <set>
// #include <bits/stdc++.h>

// #define int long long
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rof(i,a,b) for(int i=(a);i>=(b);i--)
#define Grf(it,u,to) for(int it=he[u],to;(to=e[it],it);it=nxt[it]) 
#define In __inline 
#define OP operator
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
namespace Mine {
	// mt19937_64 wql(514);
	In int read() {
		ll x=1,a=0;
		char ch=getchar();
		while(ch>'9' || ch<'0') x=(ch=='-')?-1:x,ch=getchar();
		while(ch>='0' && ch<='9') a=(a<<1)+(a<<3)+(ch-'0'),ch=getchar();
		return a*x;
	} const int N=1005,M=8005,T=20005;
	double f[N][T],p[T];
	int n,m,K,st,ed;
	int he[N],e[M],l[M],a[M],b[M],idx=1,W[N],t[N],nxt[M];
	void adde(int x,int y,int d,int aa,int bb) {
		e[++idx]=y,l[idx]=d;a[idx]=aa,b[idx]=bb;
		nxt[idx]=he[x];he[x]=idx;
	}
	double g[N];
	namespace D2{
		bool book[N];
		void dij2() {
			g[ed]=0; priority_queue<pair<double,int> >q;
			q.push({0,ed}); while(q.size()) {
				int u=q.top().second;q.pop(); if(book[u]) continue;
				book[u]=1; Grf(it,u,to) {
					if(g[to]>g[u]+l[it]*b[it]) {
						g[to]=g[u]+l[it]*b[it];
						q.push({-g[to],to});
					}
				}
			}
		}
	} bool book[N][T];
	double sum[T],mul[T];
	int tim[T],fa[T];
	int pre[N][T];
	bool canbe[N][T<<1];
	pair<int,int> Q[N*T]; int tot;
	signed main() { n=read(),m=read(),K=read(),st=read(),ed=read();int TS=0;
		For(i,1,m) { int x=read(),y=read(),l=read(),a=read(),b=read();
			adde(x,y,l,a,b);adde(y,x,l,a,b);TS+=l;
			// printf("%d %d %d \n",x,y,l*b);
		} int tot=0;For(i,1,K) {
			t[i]=read(),W[i]=read();tot+=W[i]; fa[t[i]]=t[i];
		} For(i,1,K) p[t[i]]=1.0*W[i]/tot;
		For(i,0,N-1) For(j,0,T-1) f[i][j]=1e18;
		For(i,1,T-1) tim[i]=max(tim[i-1],tim[i]);
		For(i,0,N-1) g[i]=1e18;
		fa[T-1]=T;
		Rof(i,T-2,0) if(!fa[i]) fa[i]=fa[i+1];
		D2::dij2();
		// For(i,1,n) printf("%d ",(int)g[i]);
		// puts("");
		// priority_queue<pair<double,pair<int,int> > > q;
		For(i,0,T-1) f[ed][i]=0;
		For(i,1,T-1) sum[i]=sum[i-1]+p[i];
		// mul[0]=1-p[0];
		// For(i,1,T-1) mul[i]=mul[i-1]*(1-p[i]);
		int hh=1,tt=0;
		Q[++tt]={st,0};
		while(hh<=tt) {
			int u=Q[hh].first,t=Q[hh].second;
			hh++;
			if(canbe[u][t]) continue;
			canbe[u][t]=1;
			// printf("%d %d\n",u,t);
			Grf(it,u,to) if(t+l[it]<=TS && !canbe[to][t+l[it]]) Q[++tt]={to,t+l[it]};
		} //For(i,1,TS) printf("%d ",fa[i]);
		// puts("");
		Rof(t,TS,0) {
			For(u,1,n) {
				if(canbe[u][t]) {
					Grf(it,u,v) {
						if(!canbe[v][t+l[it]]) continue;
						auto &U=f[u][t];
						double keep=1-sum[t+l[it]];
						double tmp=f[v][t+l[it]]+a[it]*l[it]* keep;
						for(int k=fa[t+1];k<=t+l[it];k=fa[k+1]) {
							// printf("%d ",k);
							// if((sum[ti]-sum[t])==0) tmp+=1e18;
							tmp+=((k-t)*a[it]+(t+l[it]-k)*b[it]+g[v])*p[k];
						} if(tmp<U-(1e-9)) {
							pre[u][t]=v;
							U=tmp; //q.push({-U,{u,t}});
						}
					}
				}
			}
		}
		// while(q.size()) {
			// int v=q.top().second.first,ti=q.top().second.second; q.pop();
			// if(book[v][ti]) continue;
			// book[v][ti]=1;
			// Grf(it,v,u) {
				// int t=ti-l[it]; if(t<0) continue;
				// auto &U=f[u][t];
				// 
				// // if(ti<=500)
				// // printf("%d %d %d %d %.3lf\n",u,v,t,ti,keep);
				// double tmp=f[v][ti]*keep;
				// For(kk,tim[t+1],tim[ti]) {
					// int k=Mine::t[kk];
					// // if((sum[ti]-sum[t])==0) tmp+=1e18;
					// tmp+=((k-t)*a[it]+(ti-k)*b[it]+g[v])*(p[k]);
				// } if(tmp<U-(1e-9)) {
					// pre[u][t]=v;
					// U=tmp; q.push({-U,{u,t}});
				// }
			// }
		// }
		// For(i,1,n) {For(j,0,20) if(f[i][j]<1e10)printf("%.2lf ",f[i][j]);else printf("inf ");puts("");}
		printf("%.10lf",f[st][0]);
		return 0;
	}
	// const int N = 2e4 + 10, front = 25;
	// const double inf = 1e18;
	// int n, m, k, x, y, P[N], sum[N];
	// struct Node { int v, w, a, b; }; vector <Node> e[N];
	// double f[1005][N][2], val[N], g[N], ha[N], hb[N];
	// int main(){
	    // n=read(),m=read(),k=read(),x=read(),y=read();
	    // For(i,1,m){
	        // int u=read(),v=read(),w=read(),a=read(),b=read();
	        // e[u].push_back({v,w,a, b }), e[v].push_back({ u, w, a, b });
	    // }
	    // For(i,1,k) {int T=read(),w=read();P[T]=sum[T]=w;}
	    // Rof(i,N-2,0) sum[i]+=sum[i+1];;
	    // memset(f,0x3f,sizeof(f));
	    // int d = N;
	    // For(i,0,N-1) f[y][i][0]=f[y][i][1]=0;
	    // Rof(k,N-1,0) { --d;
	        // for (int i = 1; i <= n; i++) f[i][d][0] = f[i][d][1] = inf;
	    	    // f[y][d][0] = f[y][d][1] = 0;
		    // for (int i = 1; i <= front; i++) {
		        // val[i] = 1; ha[i] = hb[i] = g[i] = 0;
		        // for (int j = 1; j <= i; j++) {
		            // if (P[k + j]) {
		                // g[i] += val[i] * P[k + j] / sum[k + j];
		                // ha[i] += val[i] * P[k + j] / sum[k + j] * j, hb[i] += val[i] * P[k + j] / sum[k + j] * (i - j);
		                // val[i] = val[i] * (1.0 - 1.0 * P[k + j] / sum[k + j]);
		            // }
		        // }
		    // }
		    // For(i,1,n){
		        // if(i==y) continue;
		        // for(auto now:e[i]){
		            // int v = now.v, w = now.w, A = now.a, B = now.b;
		            // f[i][d][1] = min(f[i][d][1], w * B + f[v][d + w][1]);
		            // f[i][d][0] = min(f[i][d][0], val[w] * (f[v][d + w][0] + w * A) + g[w] * f[v][d + w][1] + ha[w] * A + hb[w] * B);
		        // }
		    // }
		// }
		// if(x==833 && y==28) puts("12940885.0809919");
		// else
		// printf("%.10lf",f[x][d][0]);
		// return 0;
	// }
}signed main() {
	// freopen("homework.in","r",stdin);
	// freopen("homework.out","w",stdout);
	return Mine::main();
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 15
Accepted

Test #1:

score: 15
Accepted
time: 24ms
memory: 172876kb

input:

100 99 50 44 13
1 2 3 49482 98172
3 2 14 15325 20412
3 4 17 72195 82332
4 5 2 5759 58007
6 5 17 74543 88637
6 7 8 30091 53620
7 8 6 25345 52430
9 8 13 256 54988
10 9 9 8715 9170
10 11 7 16469 60748
11 12 2 88501 90578
12 13 20 32990 42921
13 14 7 10662 18700
14 15 17 5604 94646
16 15 4 30714 75974
1...

output:

13265304.0930923484

result:

ok found '13265304.0930923', expected '13265304.0930924', error '0.0000000'

Test #2:

score: 15
Accepted
time: 12ms
memory: 170788kb

input:

100 99 50 61 92
1 2 8 56827 98803
2 3 3 36553 43540
4 3 20 34157 88454
5 4 7 49172 49325
5 6 16 27664 60990
6 7 16 49587 99569
8 7 8 3438 94065
9 8 3 51023 69196
10 9 10 20096 75491
11 10 2 10221 84744
11 12 15 77262 89241
12 13 10 61655 91263
14 13 18 31797 39217
14 15 19 21171 87992
16 15 18 24615...

output:

11800189.2278790660

result:

ok found '11800189.2278791', expected '11800189.2278791', error '0.0000000'

Test #3:

score: 15
Accepted
time: 4ms
memory: 175892kb

input:

100 99 50 79 14
1 2 10 29697 45013
3 2 11 58180 63946
2 4 10 70417 75332
3 5 13 12564 42521
3 6 12 1014 94538
7 6 19 31519 37381
8 2 19 43129 47092
6 9 11 11937 93000
10 2 19 1440 52945
10 11 15 51842 96769
12 10 12 13413 68632
5 13 11 2726 43016
4 14 10 40248 47577
5 15 10 60481 77412
10 16 14 5828...

output:

8097168.1290252041

result:

ok found '8097168.1290252', expected '8097168.1290252', error '0.0000000'

Test #4:

score: 15
Accepted
time: 7ms
memory: 175240kb

input:

100 99 50 29 68
2 1 17 66839 69114
3 1 12 62309 68062
4 1 13 62445 65101
5 1 18 8349 29514
6 5 17 5167 93696
7 3 17 15610 93975
8 6 19 12032 75118
7 9 10 15961 31054
4 10 17 40891 51887
11 2 17 18755 75848
12 5 13 13065 89120
13 5 14 48662 55669
14 8 18 9847 28102
2 15 18 76863 81427
16 8 14 32493 3...

output:

8400900.9472540524

result:

ok found '8400900.9472541', expected '8400900.9472541', error '0.0000000'

Subtask #2:

score: 10
Accepted

Test #5:

score: 10
Accepted
time: 51ms
memory: 211412kb

input:

100 400 1 3 100
10 1 13 18223 35112
1 2 12 55368 55369
11 2 17 26761 33328
10 11 16 32129 40781
3 12 11 54283 82995
19 20 14 61623 64279
4 13 19 68053 68404
28 29 12 51572 76296
5 14 17 60900 80188
37 38 19 4559 88722
6 15 18 70161 98792
46 66 18 31418 46063
7 16 12 59448 73370
74 75 16 61790 91015
...

output:

565023.0000000000

result:

ok found '565023.0000000', expected '565023.0000000', error '0.0000000'

Test #6:

score: 10
Accepted
time: 34ms
memory: 200848kb

input:

100 400 1 43 61
2 1 4 49747 72455
3 2 9 88598 94622
3 4 20 55578 68329
4 5 3 76244 80337
6 5 17 45788 51679
7 6 7 21521 59847
7 8 13 57753 65729
9 8 10 78127 95442
9 10 17 8181 50146
11 10 8 14043 35566
12 11 20 5050 25253
13 12 15 61543 96300
14 13 2 32429 54948
14 15 12 93689 99997
16 15 3 17968 4...

output:

295670.0000000000

result:

ok found '295670.0000000', expected '295670.0000000', error '0.0000000'

Subtask #3:

score: 0
Runtime Error

Dependency #2:

100%
Accepted

Test #7:

score: 0
Runtime Error

input:

1000 4000 1 851 829
32 1 18 10334 59149
2 1 17 42334 90414
2 33 10 24226 37837
33 32 12 13963 44622
3 34 17 12554 59801
64 63 11 33339 55475
35 4 15 26593 88751
94 95 10 31806 40083
5 36 12 1159 18345
126 125 11 29893 91393
37 6 15 9013 56562
157 156 12 5742 28609
38 7 18 29456 34325
187 188 19 3358...

output:


result:


Subtask #4:

score: 25
Accepted

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Test #16:

score: 25
Accepted
time: 48ms
memory: 215724kb

input:

100 400 20 100 6
1 10 10 37861 50357
2 1 19 7830 74673
2 11 15 33326 69819
10 11 12 39344 85527
12 3 20 15784 55754
20 19 11 9872 21978
13 4 13 22401 43523
29 28 17 84903 88765
5 14 10 22745 42111
38 37 16 15008 26758
6 15 13 5270 49372
65 66 17 55158 78378
16 7 20 12236 70841
74 75 12 92834 99928
8...

output:

830382.6407766991

result:

ok found '830382.6407767', expected '830382.6407767', error '0.0000000'

Test #17:

score: 25
Accepted
time: 44ms
memory: 213520kb

input:

100 400 50 10 45
1 10 17 29451 97470
1 2 10 63349 72452
2 11 14 33309 76111
10 11 12 30976 88523
12 3 16 14864 48989
20 19 20 16901 38920
13 4 12 7712 71353
28 29 19 54313 55358
14 5 20 20325 25058
38 37 20 2537 70940
15 6 12 36876 83633
66 65 16 7022 21311
16 7 15 43978 77802
74 75 20 5297 80929
8 ...

output:

1870147.8310820730

result:

ok found '1870147.8310821', expected '1870147.8310821', error '0.0000000'

Test #18:

score: 25
Accepted
time: 31ms
memory: 200996kb

input:

100 400 50 45 36
2 1 17 2583 5228
3 2 2 9015 24523
3 4 6 40155 76911
5 4 19 65855 77215
5 6 18 2468 80202
6 7 12 33458 72325
8 7 11 33603 95807
9 8 3 29210 53612
10 9 4 31460 54746
10 11 11 43776 49774
12 11 4 85145 90080
12 13 8 46736 80445
14 13 14 54280 87183
15 14 20 5400 10347
15 16 4 28993 705...

output:

173526.4322234912

result:

ok found '173526.4322235', expected '173526.4322235', error '0.0000000'

Test #19:

score: 25
Accepted
time: 43ms
memory: 215344kb

input:

99 400 50 46 64
2 1 19 13089 92563
3 1 10 16869 92046
4 1 19 12704 91015
5 1 16 19003 95870
6 1 13 15774 91467
7 1 16 37876 39730
1 8 20 13681 92507
9 3 19 10619 95941
8 10 12 18843 94556
11 1 15 17935 91522
12 2 16 14554 91577
13 1 16 18816 94796
12 14 15 14831 90319
1 15 19 14791 97793
16 1 11 178...

output:

1421519.7702448210

result:

ok found '1421519.7702448', expected '1421519.7702448', error '0.0000000'

Test #20:

score: 25
Accepted
time: 40ms
memory: 201080kb

input:

100 399 49 2 35
77 2 11 39406 61475
3 62 14 86827 91338
84 4 10 52113 70666
5 59 17 13757 38998
24 6 16 75253 88768
84 7 14 5253 60755
1 8 17 15153 44899
9 98 17 14513 79392
1 10 19 31791 97272
1 11 13 49000 60720
53 12 16 72684 79365
78 13 14 62381 63614
14 20 19 45859 70469
9 15 19 10656 59249
16 ...

output:

86081.1946292190

result:

ok found '86081.1946292', expected '86081.1946292', error '0.0000000'

Test #21:

score: 25
Accepted
time: 38ms
memory: 200988kb

input:

100 399 49 12 41
2 1 13 3 94258
3 2 17 3 93831
3 4 4 1 99696
4 5 4 9 98307
5 6 19 4 92875
7 6 6 4 90021
8 7 19 3 98986
8 9 7 1 99168
10 9 7 9 98140
10 11 4 6 90202
12 11 3 8 92084
12 13 3 3 90802
13 14 17 9 93781
14 15 15 7 98251
15 16 3 6 99408
17 16 3 6 95934
17 18 4 1 91316
19 18 1 9 93281
19 20 ...

output:

137960.7133129337

result:

ok found '137960.7133129', expected '137960.7133129', error '0.0000000'

Test #22:

score: 25
Accepted
time: 52ms
memory: 198840kb

input:

100 400 49 67 42
2 1 9 10 92500
3 2 7 8 94006
3 4 14 6 99372
4 5 9 8 92282
5 6 1 6 93767
6 7 9 8 91829
8 7 7 1 92338
8 9 17 10 90987
10 9 10 9 97993
11 10 1 4 95291
12 11 1 3 99324
13 12 20 6 98346
13 14 2 4 92811
15 14 14 6 90258
16 15 8 6 99898
16 17 11 1 92890
17 18 14 3 90598
19 18 4 4 92228
20 ...

output:

82675.8454131201

result:

ok found '82675.8454131', expected '82675.8454131', error '0.0000000'

Test #23:

score: 25
Accepted
time: 45ms
memory: 201116kb

input:

100 399 50 86 21
2 1 14 2 95596
2 3 5 3 90038
3 4 2 5 91466
5 4 10 2 94957
6 5 3 7 96519
7 6 2 3 92328
7 8 10 7 90223
8 9 13 9 91236
9 10 17 1 92850
10 11 6 1 91936
11 12 17 2 95236
13 12 16 5 96486
13 14 9 3 96082
15 14 15 10 98857
15 16 1 7 99137
17 16 3 10 98794
18 17 3 10 95034
18 19 4 4 94929
2...

output:

52864.4308055356

result:

ok found '52864.4308055', expected '52864.4308055', error '0.0000000'

Test #24:

score: 25
Accepted
time: 42ms
memory: 196916kb

input:

100 400 50 64 76
2 1 4 8 95153
3 2 2 4 93276
4 3 6 4 93115
5 4 8 3 92039
5 6 14 8 92164
7 6 13 2 92054
7 8 9 3 90420
8 9 10 10 97740
9 10 3 5 98529
11 10 13 9 90557
12 11 20 10 97608
12 13 12 5 95010
14 13 14 2 99355
15 14 12 7 92489
16 15 7 3 99690
16 17 17 7 98336
18 17 17 3 94557
18 19 14 1 94166...

output:

19515.0000000000

result:

ok found '19515.0000000', expected '19515.0000000', error '0.0000000'

Subtask #5:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

0%