QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#451404 | #8304. Key Project | -Ofast | TL | 927ms | 40824kb | C++98 | 2.7kb | 2024-06-23 10:53:14 | 2024-06-23 10:53:14 |
Judging History
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=5e4+10;
vector <int> P[N],Q[N];
int n,m,dis[N],a[N],b[N],c[N],d[N];
namespace MCMF{
const int N=1e6+10;
int n,s,t,head[N],to[N],nxt[N],f[N],tmphead[N],c[N],cnt=-1;
int maxflow,mincost;
void add(int u,int v,int fl,int w){
++cnt;
nxt[cnt]=head[u];
head[u]=cnt;to[cnt]=v;
f[cnt]=fl;c[cnt]=w;
++cnt;
nxt[cnt]=head[v];
head[v]=cnt;to[cnt]=u;
f[cnt]=0;c[cnt]=-w;
}
int dis[N],vis[N],pre[N][2];
struct Queue{
int head,tail,a[N];
void push(int x){a[++tail]=x;}
void pop(){++head;}
int size(){return tail-head+1;}
int front(){return a[head];}
}q;
void SPFA(){
q.head=q.tail=0;
for(int i=0;i<=n;i++)dis[i]=1e9,vis[i]=0;
q.push(s);vis[s]=1;dis[s]=0;
int cur=0;
while(q.size()){
int u;
if(cur==0){
u=q.a[q.head++];
}else u=q.a[q.tail--];
vis[u]=0;
for(int i=head[u];~i;i=nxt[i]){
int v=to[i],w=c[i];
if(!f[i])continue;
if(dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
pre[v][0]=u;
pre[v][1]=i;
if(!vis[v]){
q.push(v);vis[v]=1;
}
}
}
}
}
int pid[N],qid[N];
void solve(){
while(true){
int tmp=cnt;
for(int i=0;i<=n;i++)tmphead[i]=head[i];
for(int i=1;i<=::n;i++){
if(P[i].size())add(s,i,1,P[i].back()),pid[i]=cnt;
if(Q[i].size())add(i,t,1,Q[i].back()),qid[i]=cnt;
}
SPFA();
if(dis[t]==1e9)return;
int minf=1e9,sumc=0,now=t;
vector <int> path;
while(now!=s){
path.push_back(pre[now][1]);
minf=min(minf,f[pre[now][1]]);
sumc+=c[pre[now][1]];
now=pre[now][0];
}
for(int i=0;i<path.size();i++){
f[path[i]]-=minf;
f[path[i]^1]+=minf;
}
for(int i=1;i<=::n;i++){
if(P[i].size()&&f[pid[i]])P[i].pop_back();
if(Q[i].size()&&f[qid[i]])Q[i].pop_back();
}
cnt=tmp;
for(int i=0;i<=n;i++)head[i]=tmphead[i];
mincost+=minf*sumc;
cout<<mincost<<"\n";
}
}
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
memset(MCMF::head,-1,sizeof(MCMF::head));
cin>>n>>m;
for(int i=1;i<n;i++)
cin>>dis[i];
for(int i=1;i<=m;i++)
cin>>a[i]>>b[i];
for(int i=1;i<=m;i++)
cin>>c[i]>>d[i];
MCMF::t=n+1;
MCMF::s=0;
MCMF::n=MCMF::t;
for(int i=1;i<n;i++){
MCMF::add(i,i+1,1e9,dis[i]);
MCMF::add(i+1,i,1e9,dis[i]);
}
for(int i=1;i<=m;i++){
Q[a[i]].push_back(b[i]);
}
for(int i=1;i<=m;i++){
P[c[i]].push_back(d[i]);
}
for(int i=1;i<=n;i++){
sort(Q[i].begin(),Q[i].end());
sort(P[i].begin(),P[i].end());
reverse(Q[i].begin(),Q[i].end());
reverse(P[i].begin(),P[i].end());
}
MCMF::solve();
cerr<<1.0*clock()/CLOCKS_PER_SEC<<endl;
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 36868kb
input:
4 3 1 1 1 1 1 1 2 4 6 2 1 2 2 3 5
output:
3 8 20
result:
ok 3 lines
Test #2:
score: 0
Accepted
time: 0ms
memory: 37668kb
input:
50 500 118837 951904 671499 484461 639888 359339 502649 627559 5961 20812 433609 905677 200996 201161 615383 263424 151528 844324 472585 154315 741222 247963 722818 858419 386517 100125 931060 752896 865319 23063 949988 220229 897126 259228 583375 813279 112033 676073 925357 53124 394997 392593 4992...
output:
249916 1627724 4297306 7521922 11058813 14819098 18595354 22833314 27397118 32192806 38169968 44605698 51210995 57983422 65947214 73960441 82121445 90336822 99546401 109165243 119438147 129792015 140327562 150872437 161950777 173380273 185460073 198299711 211179357 224215634 237469142 251993186 2668...
result:
ok 500 lines
Test #3:
score: 0
Accepted
time: 17ms
memory: 37912kb
input:
100 5000 161024 333083 427714 106026 344162 443967 300826 786012 190136 836472 739686 718645 621258 379491 896890 853718 132289 761595 425423 238212 266456 878908 987607 383196 425157 464423 910874 113988 596436 427196 677260 53939 353039 610651 203820 412321 810742 75711 522237 749361 213154 313223...
output:
244596 673367 1114774 1653086 2235799 2859280 3550743 4328294 5111265 5970416 6833438 7698546 8596718 9537334 10673653 11841335 13117454 14432273 15830547 17278727 18734845 20229311 21782032 23362360 24997850 26692528 28391424 30147387 31907288 33748546 35691188 37645806 39609940 41609598 43629263 4...
result:
ok 5000 lines
Test #4:
score: 0
Accepted
time: 227ms
memory: 38364kb
input:
300 20000 589233 424913 26472 555010 877553 764101 539779 342418 861724 439040 459313 518843 421817 463969 416326 348384 802183 187604 666745 329607 31379 864405 383948 216216 214607 823562 806785 481248 308705 60717 10231 892503 634831 778333 229345 254773 810990 139390 203897 878093 12605 556113 7...
output:
100488 213140 349180 573842 815426 1116056 1462744 1812722 2244746 2703883 3174800 3651102 4147393 4650694 5158675 5668646 6183335 6716217 7283456 7888069 8500618 9122205 9750795 10400551 11050357 11710647 12415089 13120968 13843813 14567012 15300273 16039492 16782040 17525930 18274542 19025483 1979...
result:
ok 20000 lines
Test #5:
score: 0
Accepted
time: 926ms
memory: 39424kb
input:
500 50000 389931 323526 397980 127878 810602 175326 183833 681018 182880 117266 603325 622561 639554 107960 301053 423699 585725 728312 759747 401710 708795 716319 677907 222410 106480 693183 12062 99078 319397 27265 184818 547305 591605 673437 248572 838416 783112 514511 590199 304268 743695 152614...
output:
28948 81176 142183 274273 412436 564080 723576 907555 1106837 1312014 1542499 1776945 2029643 2293083 2564408 2845238 3127258 3429326 3734724 4077784 4422610 4769373 5120211 5471271 5829254 6193440 6559204 6925157 7299056 7676687 8055873 8443295 8835706 9228277 9633028 10040983 10449860 10867427 112...
result:
ok 50000 lines
Test #6:
score: 0
Accepted
time: 918ms
memory: 37876kb
input:
500 50000 814225 718009 509305 663885 692938 81949 338865 256208 633763 538065 610352 418799 569529 240073 343174 858775 891248 978222 901898 541225 323850 259144 910646 494961 849671 631595 295951 684765 524225 528563 429209 29451 321964 184405 921803 6456 513800 394234 893204 858219 803508 851048 ...
output:
32751 89317 166464 257082 348771 490700 648348 829128 1048079 1268375 1494342 1728593 1974587 2230719 2490912 2751796 3018462 3288633 3567772 3849039 4133945 4422081 4712826 5006032 5300689 5605787 5917468 6231159 6553893 6879972 7225427 7587043 7954449 8323543 8693476 9063928 9452161 9842002 102336...
result:
ok 50000 lines
Test #7:
score: 0
Accepted
time: 924ms
memory: 40824kb
input:
500 50000 297562 973909 125150 594402 338413 800413 807418 507160 762601 679162 117527 20844 475754 356840 543005 70892 856074 111791 693020 842664 379999 451111 352568 516972 38094 960557 817785 653832 326000 388241 480706 997676 661863 872152 825240 622564 472444 781153 531220 657266 724498 325778...
output:
28166 61873 140869 265278 443959 623089 818253 1016724 1217343 1421306 1632243 1847700 2063786 2291906 2521700 2764826 3013266 3266487 3531216 3798951 4069988 4349099 4628951 4917513 5214365 5526450 5842545 6160755 6488215 6825410 7166464 7516286 7889086 8264302 8645444 9036030 9428791 9827768 10232...
result:
ok 50000 lines
Test #8:
score: 0
Accepted
time: 927ms
memory: 38940kb
input:
500 50000 408111 405860 980043 244502 311678 482866 300809 331874 724233 686311 305918 921260 327868 264944 224337 60710 593865 827670 626005 558689 715008 629254 291239 622999 57298 716794 670939 203622 748638 54966 498570 206475 563919 824272 225928 601663 486714 340463 817279 395076 532063 800143...
output:
80084 176593 273344 375931 481391 606044 736304 909760 1086021 1262904 1452696 1652385 1857661 2063357 2273828 2486817 2704613 2927180 3153212 3385254 3625587 3873051 4123281 4384294 4686927 4998140 5310843 5638828 5967724 6302992 6652379 7023175 7404980 7787562 8182298 8577298 8991930 9407686 98253...
result:
ok 50000 lines
Test #9:
score: 0
Accepted
time: 916ms
memory: 38388kb
input:
500 50000 703208 823547 632637 178774 648651 458695 96199 358770 115928 927436 857218 361999 105219 439431 173221 420730 210746 277490 347827 223309 801169 990535 254826 891578 171302 588559 520074 848546 936074 152062 84313 777995 487205 35420 33252 911491 338044 15007 545355 157980 564896 752072 4...
output:
33529 91228 176794 266503 371225 485659 610172 737133 871818 1012054 1187727 1383936 1589771 1795652 2007656 2228517 2468727 2712610 2961785 3219731 3499027 3779450 4063079 4347539 4657775 4992805 5335755 5681509 6033314 6388252 6748720 7121845 7495911 7871061 8247465 8625010 9006086 9389592 9793528...
result:
ok 50000 lines
Test #10:
score: -100
Time Limit Exceeded
input:
500 50000 242856 565385 293999 248736 846080 978802 200015 927271 485007 108798 159645 350738 353068 312679 967787 507335 645006 837349 666737 670595 65293 892786 811248 115947 141849 170196 502710 517577 259465 501057 215175 524776 667409 469241 279758 997997 766812 880321 94837 296922 507701 86701...
output:
119658 350300 636153 948337 1274276 1601194 1936951 2293382 2651739 3018681 3390346 3764093 4140227 4539759 4952779 5382203 5814148 6251115 6707056 7184104 7663241 8144517 8635227 9148208 9662383 10177591 10693998 11227547 11785628 12345934 12913101 13507548 14103275 14704697 15309011 15917851 16533...