QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#431779 | #4401. Prize | Savu_Stefan_Catalin | 0 | 2196ms | 659880kb | C++14 | 4.9kb | 2024-06-06 05:23:50 | 2024-06-06 05:23:50 |
Judging History
answer
#include <iostream>
#include <algorithm>
#include <vector>
#define int long long
using namespace std;
const int NMAX=1e6+505;
int cnt,ine[2][NMAX+5],lv[2][NMAX+5],n,t[2][NMAX+5],cen[2],invine[2][NMAX+5],k,q,T,id[NMAX+5],dp[NMAX+5],rmq[2][25][NMAX+5],imp[NMAX+5],invid[NMAX+5],rr[2][NMAX+5];
vector <int> v[2][NMAX+5];
pair<pair<int,int>,pair<int,int>> ras[NMAX+5];
int sz[NMAX+5],ap[NMAX+5],tt[NMAX+5],tv[NMAX+5],dp2[NMAX+5];
vector <pair<int,int>> vv[NMAX+5];
void dfs(int nod,int tata,int ind)
{
++cnt;
ine[ind][nod]=cnt;
lv[ind][nod]=lv[ind][tata]+1;
for (int i=0;i<v[ind][nod].size();++i)
{
if (v[ind][nod][i]!=tata)
{
dfs(v[ind][nod][i],nod,ind);
}
}
}
void read(int ind)
{
for (int i=1;i<=n;++i)
{
cin>>t[ind][i];
if (t[ind][i]==-1) cen[ind]=i;
else {v[ind][t[ind][i]].push_back(i);}
}
cnt=0;
dfs(cen[ind],0,ind);
for (int i=1;i<=n;++i)
{
invine[ind][ine[ind][i]]=i;
}
}
int cmp(int x,int y)
{
return ine[1][x]<ine[1][y];
}
int lca(int x,int y,int ind)
{
if (lv[ind][x]>lv[ind][y]) swap(x,y);
for (int i=20;i>=0;--i) {if (lv[ind][x]+(1<<i)<=lv[ind][y]) {y=rmq[ind][i][y];}}
if (x==y) return x;
for (int i=20;i>=0;--i) {if (rmq[ind][i][x]!=rmq[ind][i][y]) {x=rmq[ind][i][x]; y=rmq[ind][i][y];}}
return x;
}
void bfs(int nod)
{
sz[nod]=ap[nod];
for (int i=0;i<v[1][nod].size();++i)
{
bfs(v[1][nod][i]);
sz[nod]+=sz[v[1][nod][i]];
}
}
void mfs(int nod,int tata)
{
for (int i=0;i<v[1][nod].size();++i)
{
if (sz[nod]==sz[v[1][nod][i]]) {mfs(v[1][nod][i],tata); return ;}
}
vv[tata].push_back({nod,0});
tt[nod]=tata;
for (int i=0;i<v[1][nod].size();++i)
{
if (sz[v[1][nod][i]])
{
mfs(v[1][nod][i],nod);
}
}
}
int findfirst(int x)
{
if (ap[x]==1) return x;
return findfirst(vv[x][0].first);
}
int findlast(int x)
{
if (vv[x].size()==0) return x;
return findlast(vv[x][vv[x].size()-1].first);
}
int sum(int x,int stop)
{
if (x==stop) return 0;
return tv[x]+sum(tt[x],stop);
}
void lfs(int nod)
{
if (sz[nod]==1)
{
return ;
}
for (int i=0;i<vv[nod].size();++i)
{
lfs(vv[nod][i].first);
if (i)
{
int x=findlast(vv[nod][i-1].first);
int y=findfirst(vv[nod][i].first);
int xx=invid[x],yy=invid[y];
vv[nod][i-1].second=ras[xx].second.first-sum(x,vv[nod][i-1].first);
tv[vv[nod][i-1].first]=vv[nod][i-1].second;
vv[nod][i].second=ras[xx].second.second-sum(y,vv[nod][i].first);
tv[vv[nod][i].first]=vv[nod][i].second;
}
}
if (vv[nod].size()==1)
{
int xx=invid[nod];
vv[nod][0].second=ras[xx].second.second;
tv[vv[nod][0].first]=vv[nod][0].second;
}
}
void ylf(int nod)
{
for (int i=0;i<vv[nod].size();++i)
{
dp2[vv[nod][i].first]=dp2[nod]+vv[nod][i].second;
ylf(vv[nod][i].first);
}
}
void solve1()
{
for (int i=1;i<=k;++i)
{
ap[id[i]]=1;
}
bfs(cen[1]);
mfs(cen[1],0);
int cen=vv[0][0].first;
lfs(cen);
ylf(cen);
}
void solve0()
{
int ii=0;
for (int i=1;i<=k;++i)
{
if (id[i]==cen[0]) {ii=i;}
}
dp[ii]=0;
for (int i=ii+1;i<=k;++i)
{
dp[id[i]]=dp[id[i-1]]-ras[i-1].first.first+ras[i-1].first.second;
}
for (int i=ii-1;i>=1;--i)
{
dp[id[i]]=dp[id[i+1]]-ras[i].first.second+ras[i].first.first;
}
}
void makermq(int ind)
{
for (int i=1;i<=n;++i)
{
if (t[ind][i]==-1) rmq[ind][0][i]=0;
else rmq[ind][0][i]=t[ind][i];
}
for (int j=1;j<=20;++j)
{
for (int i=1;i<=n;++i)
{
rmq[ind][j][i]=rmq[ind][j-1][rmq[ind][j-1][i]];
}
}
}
signed main()
{
cin>>n>>k>>q>>T;
read(0);
read(1);
for (int i=1;i<=k;++i)
{
imp[i]=invine[0][i];
cout<<imp[i]<<" ";
}
cout<<endl;
for (int i=1;i<=k;++i)
{
id[i]=imp[i];
}
sort(id+1,id+k+1,cmp);
for (int i=1;i<=k;++i)
{
invid[id[i]]=i;
}
for (int i=1;i<k;++i)
{
cout<<"? "<<id[i]<<" "<<id[i+1]<<endl;
}
cout<<"!"<<endl;
for (int i=1;i<k;++i)
{
cin>>ras[i].first.first>>ras[i].first.second>>ras[i].second.first>>ras[i].second.second;
}
solve0();
makermq(0);
makermq(1);
solve1();
for (int i=1;i<=T;++i)
{
int x,y;
cin>>x>>y;
if (x>y) swap(x,y);
rr[1][i]=dp2[x]+dp2[y]-2*dp2[lca(x,y,1)];
rr[0][i]=dp[x]+dp[y]-2*dp[lca(x,y,0)];
}
for (int i=1;i<=T;++i)
cout<<rr[0][i]<<" "<<rr[1][i]<<'\n';
cout.flush();
return 0;
}
详细
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 10
Accepted
time: 1117ms
memory: 486956kb
input:
500000 64682 64681 100000 46115 470589 209303 2979 473162 343535 79503 299539 404621 102085 237721 279170 392890 165201 441593 456314 218991 358478 86614 410800 159785 169761 95368 285837 297549 370283 378974 26449 444381 39320 149913 404523 144109 174828 263837 49847 468694 478535 152644 216598 301...
output:
422989 414496 290928 388223 160563 301045 470257 259625 222733 231286 345214 169817 435263 277447 386014 210139 455433 225855 264772 199736 355788 288506 233893 146148 454958 267562 498596 183745 352665 151125 266374 43142 9414 204593 212097 311775 25324 300764 6643 94847 396968 428563 311355 255767...
result:
ok good job!
Test #2:
score: 0
Accepted
time: 1200ms
memory: 490800kb
input:
500000 90967 90966 100000 122547 312039 290084 118442 352297 175176 294396 496975 127062 90539 132654 408480 493670 419897 53432 141795 264165 60368 473480 5634 253119 64236 85346 422987 28583 262389 111931 271291 13577 415079 132797 256502 76402 265607 11274 289667 398726 32021 302401 410650 369760...
output:
3090 193269 3028 186608 498475 64618 82114 231445 7541 329983 134623 235591 70401 18906 403427 280451 146897 355174 160090 144279 193430 332022 488244 228900 80781 84465 218682 27818 6035 368489 155673 440755 443926 241570 193717 143661 374105 56616 323329 95909 337798 20531 236329 28564 437244 4969...
result:
ok good job!
Test #3:
score: -10
Wrong Answer
time: 1126ms
memory: 445508kb
input:
500000 68287 68286 100000 273928 229768 65518 144983 311611 494773 489379 439644 467893 456131 430188 247387 485565 272285 474827 476962 338340 365804 344570 390867 390170 456217 43185 447057 385874 305750 107742 230530 259907 252254 280920 16831 45761 185191 117450 55891 175190 255615 35904 14855 2...
output:
242387 146602 106115 32426 8390 3821 314935 201979 171459 413397 469146 119187 74265 167902 479051 182695 260054 235048 135315 280891 13044 240704 209304 211564 188960 481631 289686 273785 175837 385737 204887 288861 330677 315423 120726 278204 129910 396267 322633 472675 325914 329277 67326 391455 ...
result:
wrong answer wrong answer on the first integer of query #1: read 11194 but expected 14620
Subtask #2:
score: 0
Wrong Answer
Test #13:
score: 25
Accepted
time: 1292ms
memory: 493556kb
input:
500000 88721 177440 100000 30974 23891 211201 125199 180489 387190 218020 498838 230147 307989 484136 257785 353027 304420 311738 169842 334090 486070 126212 328609 174959 368840 238722 418092 488389 226349 427271 457322 332454 12958 197530 264474 355717 482774 221286 282148 216441 266659 213750 628...
output:
63742 11431 300071 157785 268420 71772 84553 267656 174540 21500 451751 82419 58833 165916 94199 78203 263216 146169 306934 50728 338250 199716 469441 135516 133967 123248 375309 17045 459156 413018 49645 73720 188292 322328 493921 152164 219927 140202 236207 266137 180568 32077 371348 66876 354136 ...
result:
ok good job!
Test #14:
score: 0
Accepted
time: 1165ms
memory: 489184kb
input:
500000 50267 100532 100000 68723 142685 445548 215087 478634 201362 177405 373123 227456 161487 276716 452818 230715 466238 250886 368974 77152 493722 129115 154402 319190 170867 27898 338290 170229 428001 62611 19188 164329 435154 128 358453 137653 430592 160391 407392 125236 320137 27945 393135 17...
output:
71019 495557 31730 116065 88378 303281 100690 375513 399886 191425 467776 333920 329290 14772 76952 27872 409419 154816 362396 408615 364034 455915 146139 56273 450037 424683 327232 385588 134811 499210 495342 81995 301341 243738 7518 121857 431344 232635 155628 226209 161465 497460 38422 126619 489...
result:
ok good job!
Test #15:
score: -25
Wrong Answer
time: 1144ms
memory: 447680kb
input:
500000 67604 135206 100000 269046 235003 144646 314602 323547 204450 484229 26672 78499 602 110738 117079 125630 408912 188317 256853 71590 365703 370008 194267 342683 400737 369194 127912 96314 269751 219125 431887 398790 200053 279314 365797 187505 75025 48264 492515 387506 13267 80948 378737 1106...
output:
304557 5586 35015 142984 203679 307387 69839 114137 351992 102549 275087 115971 152276 166589 173091 315821 346786 327878 347431 197274 176411 20689 233103 290982 172652 217254 88597 257648 441421 8668 230244 414354 50518 158452 315685 346828 429538 322192 171982 487157 154079 214541 343978 425067 4...
result:
wrong answer wrong answer on the first integer of query #1: read 14144 but expected 14684
Subtask #3:
score: 0
Wrong Answer
Test #25:
score: 19
Accepted
time: 960ms
memory: 485468kb
input:
500000 200 199 40000 76296 130139 291501 292412 139543 433345 372726 451574 18315 465578 324564 477223 237354 81532 65170 465332 342130 9670 193303 193680 129668 149532 268907 89969 398275 356210 324593 433492 482232 466692 135343 433758 102545 287283 432859 351864 305769 489532 101532 450535 295762...
output:
20242 414878 185020 125537 353357 496468 308518 188057 254952 120898 414314 11748 435424 326112 345902 271794 473882 337923 135188 438050 45188 88306 260313 116954 457474 435919 366460 431766 397351 392326 178950 199724 227083 282259 70917 121346 109196 193669 242154 12225 466790 155481 287973 15749...
result:
ok good job!
Test #26:
score: 0
Accepted
time: 966ms
memory: 481596kb
input:
500000 200 199 40000 83785 150667 304961 267635 97760 385201 77226 6522 352645 72592 427133 30755 100574 359648 403948 394809 425453 115868 11287 351385 494434 245106 58157 395180 326236 277135 359592 13569 76251 45366 172378 122783 216597 466130 284420 342613 471698 380682 92490 79264 241049 54038 ...
output:
107095 98656 106791 304190 196877 423284 60540 204253 341441 59196 240332 29151 433366 290562 22079 64655 213528 72009 364851 443801 202553 8696 9763 456384 397249 125804 414847 223082 446791 174 461813 451655 292806 308476 264153 244973 167889 101629 244034 183440 234960 246613 494471 130935 20773 ...
result:
ok good job!
Test #27:
score: -19
Wrong Answer
time: 675ms
memory: 433868kb
input:
500000 200 199 40000 94863 498513 460682 411416 360517 309831 253717 325019 496632 255803 130770 289206 181204 74729 481723 293737 94126 307214 342974 448321 17084 433126 387809 279606 251781 65795 125269 129465 433572 219622 11806 179248 367117 84640 114067 122590 4140 116015 77759 392439 408930 10...
output:
290210 13677 151634 40727 24083 377951 51259 24387 78447 258948 149198 97404 320915 110359 396250 159729 244808 125173 325310 78665 311099 89482 494453 148339 485441 212679 140059 237182 317985 425227 437371 495349 444488 169841 239410 91689 156783 214680 246889 14065 65024 408878 386696 105752 3679...
result:
wrong answer wrong answer on the first integer of query #1: read 8069 but expected 8961
Subtask #4:
score: 0
Wrong Answer
Test #37:
score: 22
Accepted
time: 2182ms
memory: 659880kb
input:
1000000 1000 999 100000 678746 439069 32542 85937 936926 284219 461661 203235 533462 940676 230275 621140 780674 254931 562355 229273 201341 493976 358955 963527 880412 91220 474599 160086 698841 591551 718276 844558 39859 765917 34722 401724 219774 443004 682244 545401 968419 968020 354030 411187 1...
output:
545967 706162 53597 107558 776536 230611 572458 293457 390487 241653 638541 42868 433774 438059 293014 739962 25440 503383 628342 573629 887812 909797 805385 862282 382785 706534 190319 439139 648412 626240 131005 848982 269684 840650 376086 933701 18720 749474 336321 160119 795534 671698 201133 610...
result:
ok good job!
Test #38:
score: 0
Accepted
time: 2196ms
memory: 658960kb
input:
1000000 1000 999 100000 530144 36744 762893 712555 181981 816257 634992 419372 362279 817260 80801 697008 163211 900947 207310 862766 871091 388529 304808 574011 609949 509094 682125 781230 431445 517909 578411 288003 874415 410542 327673 607230 278208 956997 60166 842448 708661 562761 996349 382922...
output:
95498 889615 960323 436119 268907 878076 506332 704874 156497 67827 745845 203785 930852 891171 111021 389493 512868 480450 704804 985356 427544 771792 987920 534755 390890 820863 819565 664577 291796 963733 65362 76637 833989 747732 553794 727554 980477 63319 4035 692108 638253 898078 315136 558195...
result:
ok good job!
Test #39:
score: -22
Wrong Answer
time: 1561ms
memory: 570108kb
input:
1000000 1000 999 100000 184414 849676 938006 927343 390133 327580 229110 507237 712311 8816 414520 114671 637641 82050 586607 523821 775429 139792 129360 175687 202474 801377 53523 281419 268534 488983 371227 294280 754555 448802 474939 391153 68307 762784 972243 245396 471656 982894 891252 945526 5...
output:
277025 98015 61408 27302 933005 948653 685171 412061 686090 401874 886528 60098 393982 922827 149085 180671 236305 591437 853563 94232 622963 259325 311993 944027 347203 610609 801299 48594 688433 575174 279735 114109 477037 251655 246985 757503 393269 511526 53445 736190 820306 622599 212823 24516 ...
result:
wrong answer wrong answer on the first integer of query #1: read 7348 but expected 10744
Subtask #5:
score: 0
Skipped
Dependency #4:
0%