QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#558018#8673. 最短路径syp110 2260ms100360kbC++142.6kb2024-09-11 13:29:262024-09-11 13:29:31

Judging History

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

  • [2024-09-11 13:29:31]
  • 评测
  • 测评结果:0
  • 用时:2260ms
  • 内存:100360kb
  • [2024-09-11 13:29:26]
  • 提交

answer

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e5+10;
struct edge
{
	int v;
	unsigned w;
};
struct node
{
	ll d;
	int u,i;
	bool operator <(const node &b)const
	{
		return d>b.d;
	}
};
vector<edge>gs[N],gt[N];
int n,m,q;
ll ds[N],dt[N];
unsigned sd;
bool vs[N],vt[N];
ll query(int s,int t)
{
	if(s==t)
	{
		return 0;
	}
	if(gs[s].empty()||gt[t].empty())
	{
		return -1;
	}
	vector<int>us{s},ut{t};
	ds[s]=dt[t]=0;
	vs[s]=vt[t]=1;
	priority_queue<node>qs,qt;
	qs.push({gs[s][0].w,s,0});
	qt.push({gt[t][0].w,t,0});
	int z=0;
	while(!qs.empty()&&!qt.empty())
	{
		if(qs.size()<=qt.size())
		{
			auto [d,u,i]=qs.top();
			int v=gs[u][i].v;
			qs.pop();
			if(i+1<gs[u].size())
			{
				qs.push({ds[u]+gs[u][i+1].w,u,i+1});
			}
			if(vs[v])
			{
				continue;
			}
			vs[v]=1;
			ds[v]=d;
			us.push_back(v);
			if(vt[v])
			{
				z=v;
				break;
			}
			if(!gs[v].empty())
			{
				qs.push({d+gs[v][0].w,v,0});
			}
		}
		else
		{
			auto [d,u,i]=qt.top();
			int v=gt[u][i].v;
			qt.pop();
			if(i+1<gt[u].size())
			{
				qt.push({dt[u]+gt[u][i+1].w,u,i+1});
			}
			if(vt[v])
			{
				continue;
			}
			vt[v]=1;
			dt[v]=d;
			ut.push_back(v);
			if(vs[v])
			{
				z=v;
				break;
			}
			if(!gt[v].empty())
			{
				qt.push({d+gt[v][0].w,v,0});
			}
		}
	}
	if(!z)
	{
		for(auto u:us)
		{
			vs[u]=0;
		}
		for(auto u:ut)
		{
			vt[u]=0;
		}
		return -1;
	}
	ll res=ds[z]+dt[z];
	for(auto u:us)
	{
		ll lim=ds[z]-ds[u]<<1;
		for(auto e:gs[u])
		{
			if(e.w>=lim)
			{
				break;
			}
			if(vt[e.v])
			{
				res=min(res,ds[u]+e.w+dt[e.v]);
			}
		}
	}
	for(auto u:ut)
	{
		ll lim=dt[z]-dt[u]<<1;
		for(auto e:gt[u])
		{
			if(e.w>=lim)
			{
				break;
			}
			if(vt[e.v])
			{
				res=min(res,ds[e.v]+e.w+dt[u]);
			}
		}
	}
	for(auto u:us)
	{
		vs[u]=0;
	}
	for(auto u:ut)
	{
		vt[u]=0;
	}
	return res;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>q>>sd;
	mt19937 rnd(sd);
	auto ver=[&](){
		static const unsigned LIM=-1u/n*n;
		unsigned x;
		for(x=rnd();x>=LIM;x=rnd());
		return x%n+1;
	};
	for(int i=1;i<=m;i++)
	{
		int u=ver(),v=ver();
		unsigned w=rnd();
		gs[u].push_back({v,w});
		gt[v].push_back({u,w});
	}
	for(int i=1;i<=n;i++)
	{
		sort(gs[i].begin(),gs[i].end(),[&](auto x,auto y){return x.w<y.w;});
		sort(gt[i].begin(),gt[i].end(),[&](auto x,auto y){return x.w<y.w;});
	}
	while(q--)
	{
		int s,t;
		cin>>s>>t;
		cout<<query(s,t)<<'\n';
	}
	cout<<flush;
	return 0;
}

詳細信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 5
Accepted
time: 0ms
memory: 16592kb

input:

4 8 5 1112792816
2 3
4 3
4 3
3 2
1 4

output:

3419197189
1798364963
1798364963
3986398077
2337967903

result:

ok 5 lines

Test #2:

score: 0
Wrong Answer
time: 4ms
memory: 16036kb

input:

2000 2000 2000 3336994405
659 1650
1678 341
818 235
1380 1865
1927 1366
1233 1673
267 1698
775 1022
1255 1110
1533 1928
1854 169
1579 729
449 1335
943 583
360 50
795 926
1584 911
1924 604
280 309
1429 420
1107 1858
1466 76
265 1109
1077 622
245 1941
957 1434
1560 1128
122 51
229 925
826 1006
851 323...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

wrong answer 409th lines differ - expected: '43257212723', found: '97106218'

Subtask #2:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 427ms
memory: 78496kb

input:

3000 3000000 10000 37461678
2873 1368
1757 2000
1262 1822
2484 1778
2055 2096
2545 366
2923 2028
1469 1874
691 631
1173 2967
894 2020
1207 881
373 236
1913 1923
1351 16
1066 2032
471 1561
1047 2043
457 145
2728 1752
2521 1199
1568 904
2515 543
1472 2161
748 2744
748 1908
912 172
2340 2494
977 267
10...

output:

2823944
2324315
10455196
4012798
2662664
3324468
2431348
5492767
10425984
1133220
1959979
195180
20598369
1849416
10990647
707777
3371210
140682
4339337
4249333
4935479
17113464
1518112
15254258
1455151
1374451
6683279
8309109
4798604
354015
2225467
6584291
5752547
3160393
4734680
2068851
6338544
37...

result:

wrong answer 1st lines differ - expected: '36084543', found: '2823944'

Subtask #3:

score: 0
Wrong Answer

Test #13:

score: 0
Wrong Answer
time: 31ms
memory: 25004kb

input:

200000 200000 10000 1824322211
104482 112162
130667 13436
36792 142259
51832 97549
15358 180076
128251 92635
45296 195115
62109 38014
22014 86754
79735 103777
94797 96086
196760 5955
45622 59618
12995 62585
55686 156402
23085 68138
170749 148553
97603 160274
112975 22651
116322 190720
84774 57075
23...

output:

-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
...

result:

wrong answer 679th lines differ - expected: '172751101166', found: '2893264994'

Subtask #4:

score: 0
Wrong Answer

Test #17:

score: 0
Wrong Answer
time: 1136ms
memory: 33564kb

input:

200000 500000 10000 3113327438
68816 31422
174349 125983
18111 188786
84806 87249
142007 180723
95611 116398
104758 196349
77547 89859
120350 77199
110906 10209
177461 194861
115505 105566
27493 166237
15676 158290
86204 116010
159979 125659
132461 61989
194289 157721
18830 82910
166696 98162
125208...

output:

553459496
-1
498763078
944302279
-1
2621115512
-1
-1
482745918
440741084
-1
-1
664261670
158521917
204940379
-1
-1
-1
202151957
187514669
1013990856
2306723248
-1
59292044
2015098785
3692395135
-1
1618136801
1508394521
-1
2012883414
1026185329
-1
1363063005
444516208
-1
-1
1026850955
999512832
-1
-1...

result:

wrong answer 1st lines differ - expected: '21671419385', found: '553459496'

Subtask #5:

score: 0
Wrong Answer

Test #21:

score: 0
Wrong Answer
time: 1152ms
memory: 33512kb

input:

200000 500000 10000 1843053063
3409 108359
168924 184622
13119 119837
109492 38050
97152 51201
49047 12472
183998 191613
193074 177289
194248 104409
15509 88499
61967 143398
4532 56790
196650 158711
63655 70744
140178 107299
63530 87330
127334 159237
7134 184418
125289 28604
176966 179527
181695 128...

output:

388018601
1289869509
2219332778
488961048
-1
1160226155
765571521
797262379
1694585962
1382681861
2022543252
995016513
965169798
1348178056
1706082458
1203970532
3224800745
-1
-1
792096934
2737379804
1121281745
466793436
300053204
2856406619
565165162
62937736
300983589
279669827
1020366515
95894874...

result:

wrong answer 1st lines differ - expected: '18098332289', found: '388018601'

Subtask #6:

score: 0
Wrong Answer

Test #24:

score: 0
Wrong Answer
time: 1388ms
memory: 97424kb

input:

100000 3000000 10000 3892765041
14843 34156
43390 49542
38564 95501
26194 87126
18638 53346
69414 47011
95472 58303
44370 77172
75652 90555
94386 31888
47911 9905
70599 97061
52764 24896
31445 15589
82314 43852
97155 93412
11834 45082
75614 42459
67802 32024
82389 4968
32860 62514
97630 28012
14839 ...

output:

228383908
222570834
96438656
271656099
51287296
244748405
26351101
100094626
128881545
278070244
54948667
26485520
479864055
103427674
132980614
169069096
188417420
422168417
306045599
26926551
187225135
48931519
267917469
145987726
1172908
115850115
113860702
162984869
53986329
209284415
32462507
3...

result:

wrong answer 1st lines differ - expected: '1547972368', found: '228383908'

Subtask #7:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 2260ms
memory: 100360kb

input:

200000 3000000 10000 3910662331
161257 40967
50546 86049
199665 199302
177403 36274
158790 143151
193304 78511
28032 149723
96394 37099
2157 76024
195400 34830
41933 147591
191613 96468
194837 67293
57992 63117
24749 6694
117818 87323
46130 53470
174812 24950
149173 124886
119910 54123
2297 124533
5...

output:

124787214
473481726
95126832
484890637
304044159
249004883
15533746
242042338
48685530
146249630
354759407
174486956
312791014
62287292
156208969
214990362
778803187
150400561
262063860
429211610
58273769
53523042
203252327
39206637
202222855
109935870
320026887
172773678
897928966
55081117
22257070...

result:

wrong answer 1st lines differ - expected: '3371897180', found: '124787214'