QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#840802#9903. 最短路径iris2617#100 ✓1092ms62512kbC++232.2kb2025-01-03 03:52:562025-01-03 03:52:57

Judging History

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

  • [2025-01-03 03:52:57]
  • 评测
  • 测评结果:100
  • 用时:1092ms
  • 内存:62512kb
  • [2025-01-03 03:52:56]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long
#define matsuri pair<int,int>
//const int iris = 1e9+7;
const int iris = 998244353;
using namespace std;

const int N = 300;

vector<vector<int> > arr(N+1, vector<int>(N+1)), dis(N+1, vector<int>(N+1, 1e18));
vector<vector<int> > st(N*4);
vector<vector<tuple<int,int,int> > > qq(N+1);
vector<int> ok;
vector<int> ans;
int n;

void add(int i,int l,int r,int L,int R,int x)
{
	int m=l+(r-l)/2;
	if(L<=l && r<=R)
		st[i].emplace_back(x);
	else if(R<=m)
		add(i*2,l,m,L,R,x);
	else if(L>m)
		add(i*2+1, m+1, r, L, R, x);
	else
	{
		add(i*2,l,m,L,R,x);
		add(i*2+1, m+1, r, L, R, x);
	}
}

void sana(int i,int l,int r)
{
	vector<tuple<int,int,int> > rev;
	
	auto up=[&](int a,int b,int c)
	{
		if(c<dis[a][b])
		{
			rev.emplace_back(a,b,dis[a][b]);
			dis[a][b]=c;
		}
	};
	
	for(int k:st[i])
	{
		for(int i:ok)
		{
			up(k,i,arr[k][i]);
			up(i,k,arr[i][k]);
		}
		for(int i:ok)
		{
			for(int j:ok)
			{
				up(i,k,dis[i][j]+dis[j][k]);
				up(k,i,dis[k][j]+dis[j][i]);
			}
		}
		for(int i:ok)
		{
			for(int j:ok)
			{
				up(i,j,dis[i][k]+dis[k][j]);
			}
		}
		ok.emplace_back(k);
	}
	
	if(l==r)
	{
		for(auto [s,t,id]:qq[l])
			ans[id]=dis[s][t];
	}
	else
	{
		int m=l+(r-l)/2;
		sana(i*2,l,m);
		sana(i*2+1,m+1,r);
	}
	
	/*cout<<" owo "<<i<<' '<<l<<' '<<r<<'\n';
	for(int x:ok)
	{
		cout<<' '<<x;
	}
	cout<<'\n';
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<dis[i][j]<<' ';
		}
		cout<<'\n';
	}*/
	
	reverse(rev.begin(), rev.end());
	for(auto &[a,b,c]:rev)
		dis[a][b]=c;
	for(int &x:st[i])
		ok.pop_back();
}

void solve()
{
	int q;
	cin>>n>>q;
	ans.resize(q);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>arr[i][j];
	for(int i=1;i<=n;i++)
		dis[i][i]=0;
	for(int i=1;i<=n;i++)
	{
		if(i>1)
			add(1,1,n,1,i-1,i);
		if(i<n)
			add(1,1,n,i+1,n,i);
	}
	for(int i=0;i<q;i++)
	{
		int s,t,p;
		cin>>s>>t>>p;
		qq[p].emplace_back(s,t,i);
	}
	sana(1,1,n);
	for(int x:ans)
		cout<<x<<'\n';
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);

	int T=1;
	//cin>>T;
	while(T--)
		solve();

	return 0;
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 10
Accepted
time: 30ms
memory: 7072kb

input:

100 100
0 7772271323914 22125803016911 3221373 4166251171807 748339783252 34065805188167 50811428832368 1367651438428 24197139580618 6663135541534 27879426632102 15365243414328 10780564011323 2018609024 397712557916 28396067120913 356407886112 44232262619414 162855983068 447276 67425790697675 173378...

output:

65676043
128648
362303
1486937
91572
1463718
46686875
324593
989861
350083
2989287
377654
499744
443840
39032539
383758
4163602
893730
1337941
132338
362428
321631
538666
151023
38683069
3433942
1454333
3455507
46615196
3138905
91995
371747
2693653
783946
983703
1065302
361784
330467
467961
64976995...

result:

ok 100 numbers

Test #2:

score: 10
Accepted
time: 26ms
memory: 7504kb

input:

100 100
0 17578387256913 79089544497 431 594034211131 5170073338267 19361776466479 4427688105 11926603171157 45072603252 11943768005878 50148978000869 106737346550 27519538966959 37137900185801 3989886236022 15439195175968 19533214331980 4915912422439 66000188414990 29166748845681 354388844 66952055...

output:

270396
334851
245236
1176100
341148
204465
28215974
41789
267896
749776
59349
846978
33496
380499
3023922
1125890
977320
916852
28243174
15626518
1880264
1530504
322009
4315197
4316050
334809
1336699
272409
10907242
8094512
64571006
1024776
1802300
51958
2163543
107295
4521692
15940622
16898232
5256...

result:

ok 100 numbers

Test #3:

score: 10
Accepted
time: 33ms
memory: 7280kb

input:

100 100
0 773801766444 3840925618 1343152952632 64307613436502 8683601469 45434524869106 81117353046 1987337565207 2858076509641 243425132692 1802644161264 25822170325295 6528483907 41283282749 3826491866697 22344866920790 96931641334570 5174664972951 1538931163479 47147864358837 51639382527727 9867...

output:

2561993
1093019
1457614
1156053
2916029
1968004
2924408
874504
2479015
2550089
842128
2104789
608454
1115836
58077849
1616486
4774623
87127444
91338615
1929592
2561661
951355
849612
2012547
683644
7330925
553878
979715
187349
18005450
688349
1134691
1282703
5041582
7013537
415247
839394
1664433
2564...

result:

ok 100 numbers

Test #4:

score: 10
Accepted
time: 973ms
memory: 38344kb

input:

300 1000
0 1395254281321 81149967048674 808789341190 79819267873907 57367221292974 13013648824390 64258407230458 14605579839044 12975220495832 120220182607 39743014887008 3266138366431 119198662688 28545770063374 17260222479825 21107475181134 55682577272703 13633518098188 40028750178497 550275401200...

output:

164487
70070
33848
39326
1597185
163213
138322
66529
66167
166327
218252
366116
21116
45195
49168
66962
122251
287393
210210
215838
112318
2067194
44881
59954
30412
724716
132047
69521
148433
78293
77036
173596
233275
352717
164487
2112631
321614
1368445
238400
158748
731528
225925
63524
60852
23446...

result:

ok 1000 numbers

Test #5:

score: 10
Accepted
time: 1003ms
memory: 40520kb

input:

300 1000
0 6409029058 18566975677517 1453118645319 19988064330 32639805173638 1639371569240 698806223545 185977936143 1082787768141 2239906104533 4403543180683 961039210337 4145037246 1858235 2692041139214 2307668378 1339668614 6253996882 17345652389482 1009665462517 17453151773298 3394297603587 135...

output:

172637
125082
159865
37423
227674
366873
339714
14728002
525508
113999
249428
1167232
217491
106938
64057
83069
531557
86157
186195
3123909
317408
166894
267293
148594
518134
122426
132238
187234
1406783
95585
91977
133866
129453
245784
463234
553195
182261
139043
73942
1434752
256364
106470
156056
...

result:

ok 1000 numbers

Test #6:

score: 10
Accepted
time: 1092ms
memory: 61468kb

input:

300 500000
0 87730664049 1603788381608 71952849510530 1142923985 24159738602021 92997246299231 64880292979225 50411033738604 54528465801 31135537246199 231468171471 419 236677264159 38114009155579 2508003778771 57570811058461 24329307886989 292160437 4902439019817 15740104936818 44927292337698 79204...

output:

994739
54618
33982
178407
77515
47564
39544
43347
26386
58303
39625
76331
383456
112760
64935
63104
68977
51166
39127
49697
73897
549313
34130
44871
128332
78411
3082390
72410
69203
102111
380954
45942
60659
91515
1970063
174353
55163
39901
45833
43646
51084
48981
48846
43593
92235
70473
148206
1555...

result:

ok 500000 numbers

Test #7:

score: 10
Accepted
time: 1075ms
memory: 60060kb

input:

300 500000
0 52626347413773 1707334632128 70009373655708 25860849031824 32110463708287 3869001849431 346520043666 34919901831451 18512922395 14200680384312 436214584213 79240628473151 14981957306825 1273864589622 475718847939 5308515658147 30868844002 272698735884 23608283030932 509189357147 1289077...

output:

52439
27329
78603
3158345
115097
64214
54794
42343
90717
48060
31826
427105
37427
30993
578481
59296
35095
38925
36501
212156
43375
26171
123760
98242
40607
82758
67048
74342
17894
47515
206356
73634
59011
38416
41401
415399
38702
111752
37300
33994
42098
42454
113518
59342
29214
204481
33488
81580
...

result:

ok 500000 numbers

Test #8:

score: 10
Accepted
time: 1089ms
memory: 60644kb

input:

300 500000
0 6330470680301 23874488164149 98626 4160170543478 91396404907 58736315444 12401313360570 14412917281027 38099628392841 282475659499 671873736937 772895099008 19153316198 7022869 27995285198114 11692649915256 7588637657572 823853943323 2206830727999 2151020585 915266887628 5916118204273 1...

output:

54159
293560
56301
292181
93253
60385
120895
245670
102254
63263
32081
2837458
73816
64442
65080
87276
50500
102821
70941
1761130
244750
2904083
213854
45934
176069
247081
785882
57550
49112
64280
282160
34322
21249
250816
30995
2700394
110018
83125
78567
232782
87098
571096
127607
69995
77182
47292...

result:

ok 500000 numbers

Test #9:

score: 10
Accepted
time: 1086ms
memory: 56904kb

input:

300 500000
0 54720923847450 10903523785666 4358689132 83283776625462 8218771493732 35488829878660 3339439 6500864120913 61307902687569 53710291769435 19917041512 463251296446 6646718981507 2456241779832 481716427467 7469732375 21084043486 206425878 740838785326 11139961838828 136091417 806439547295 ...

output:

177525
35945
237199
42703
191004
27318
42093
46619
100995
108533
40589
46676
106620
37048
88229
173568
187342
109950
141661
59230
2836862
182615
81757
247768
477729
199693
71286
54160
127081
241436
46609
7211348
37469
32662
398610
46605
62244
35002
201024
29075
65648
98623
87654
75067
137503
78024
1...

result:

ok 500000 numbers

Test #10:

score: 10
Accepted
time: 1065ms
memory: 62512kb

input:

300 500000
0 5722301682716 8452307607009 329027699594 1815251343 30089254283 943061127487 44841695197962 5020142381745 3623788938103 10069313592506 5560807810421 67387215059128 1502958639680 4306022199080 36093310364434 21620815132153 1864471728058 3394408494751 1018569343784 2241919490 118027786703...

output:

113041
140362
37931
623026
83711
129493
656698
3566358
124010
128366
135959
195189
161997
538451
349366
227657
101560
2635278
396706
138747
1485566
414308
129685
59258
180236
81699
53646
452864
121691
572639
4668717
78210
89832
620266
67621
117448
62685
46710
1428853
505935
102461
3523364
163282
471...

result:

ok 500000 numbers

Extra Test:

score: 0
Extra Test Passed