QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#38783 | #1454. Um nik's Algorithm | wyhao | WA | 1600ms | 204072kb | C++ | 1.4kb | 2022-07-07 13:39:38 | 2022-07-07 13:39:40 |
Judging History
answer
#include<cstdio>
#include<cstring>
using namespace std;
const int N=2000005,M=N<<3;
int n1,n2,m,cnt,S,T;
int to[M],nxt[M],f[M],h[N<<1];
void add(int i,int x,int y,int z){
to[i]=y;f[i]=z;nxt[i]=h[x];h[x]=i;
}
int cur[N<<1],dep[N<<1];
int que[N<<1],op,cl;
bool bfs(){
memset(dep,0,sizeof dep);
memcpy(cur,h,sizeof cur);
op=0;cl=1;que[1]=S;dep[S]=1;
while(op<cl){
int x=que[++op];
for(int i=h[x],y;i;i=nxt[i]){
y=to[i];
if(!f[i]) continue;
if(!dep[y]){
dep[y]=dep[x]+1;
que[++cl]=y;
}
if(y==T) return true;
}
}
return false;
}
int min1(int x,int y){
return x<y?x:y;
}
int dfs(int x,int lim){
if(x==T) return lim;
int flow=lim,k;
for(int &i=cur[x],y;i;i=nxt[i]){
y=to[i];
if(dep[y]==dep[x]+1 and f[i]){
k=dfs(y,min1(f[i],flow));
flow-=k;f[i]-=k;f[i^1]+=k;
if(!flow) break;
}
}
if(flow) dep[x]=0;
return lim-flow;
}
int main(){
scanf("%d%d%d",&n1,&n2,&m);
S=n1+n2+1;T=S+1;cnt=1;
for(int i=1,x,y;i<=m;i++){
scanf("%d%d",&x,&y);
add(++cnt,x,y+n1,1);
add(++cnt,y+n1,x,0);
}
for(int i=1;i<=n1;i++){
add(++cnt,S,i,1);
add(++cnt,i,S,0);
}
for(int i=1;i<=n2;i++){
add(++cnt,i+n1,T,1);
add(++cnt,T,i+n1,0);
}
int ans=0;
if(n1+n2<=20000){
while(bfs()) ans+=dfs(S,min1(n1,n2));
}else{
if(bfs()) ans+=dfs(S,min1(n1,n2));
}
printf("%d\n",ans);
for(int i=1;i<=m;i++){
if(!f[i<<1]) printf("%d\n",i);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 42596kb
input:
3 2 4 1 1 2 1 3 1 3 2
output:
2 2 4
result:
ok answer: 2, maximum: 2
Test #2:
score: 0
Accepted
time: 4ms
memory: 40536kb
input:
20 20 20 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 20
output:
20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
result:
ok answer: 20, maximum: 20
Test #3:
score: 0
Accepted
time: 21ms
memory: 44640kb
input:
1000 1000 10000 988 405 844 805 40 354 416 591 520 704 697 24 315 386 122 390 991 213 506 14 309 298 26 829 329 63 787 91 971 703 805 699 624 645 121 181 841 741 473 84 258 116 490 753 725 603 265 302 869 71 611 507 59 292 11 532 117 61 192 600 650 342 204 580 687 675 670 407 637 622 569 236 728 476...
output:
1000 3 76 91 153 155 168 171 173 233 234 297 398 401 414 428 504 515 583 603 677 697 791 936 954 972 978 987 993 1009 1031 1056 1085 1197 1278 1280 1313 1331 1337 1350 1504 1516 1576 1590 1606 1665 1690 1703 1759 1768 1788 1794 1836 1894 1971 1977 1980 2014 2031 2042 2053 2069 2099 2118 2122 2132 21...
result:
ok answer: 1000, maximum: 1000
Test #4:
score: 0
Accepted
time: 3ms
memory: 40528kb
input:
100 2 200 40 1 22 2 75 2 79 1 27 2 11 1 7 1 64 1 21 1 57 2 47 1 4 2 61 2 37 1 8 2 32 2 84 1 63 1 67 1 86 2 88 2 73 1 17 1 94 2 44 2 19 2 16 1 33 2 92 1 24 2 100 2 18 2 85 1 7 2 43 1 82 2 15 2 88 1 91 1 65 1 69 1 36 1 6 2 23 2 58 1 59 1 64 2 38 1 72 1 99 1 76 1 11 2 2 2 98 1 66 2 77 1 47 2 98 2 52 2 ...
output:
2 116 150
result:
ok answer: 2, maximum: 2
Test #5:
score: 0
Accepted
time: 25ms
memory: 40540kb
input:
1000 1000 1000 411 789 753 186 495 203 417 324 490 424 195 480 314 23 663 218 12 747 124 390 134 38 218 536 291 840 174 908 474 767 313 167 575 9 857 427 313 27 959 935 258 70 472 957 747 228 205 939 293 303 626 802 712 283 658 346 208 383 889 204 99 640 801 966 828 742 534 11 259 734 226 129 843 35...
output:
540 1 2 3 5 6 7 11 17 18 21 22 25 31 33 34 37 41 42 43 44 45 46 49 50 52 55 58 60 62 63 66 67 70 74 76 78 80 84 85 86 88 89 90 92 94 95 96 97 100 103 107 111 113 114 117 119 120 121 122 125 129 130 131 143 148 149 150 151 154 155 157 160 161 162 163 165 166 167 168 169 173 175 178 179 192 195 196 19...
result:
ok answer: 540, maximum: 540
Test #6:
score: 0
Accepted
time: 15ms
memory: 40612kb
input:
1000 2000 3000 143 619 571 526 215 1074 6 1714 370 937 120 784 134 1671 722 1528 397 345 464 401 198 589 283 564 212 232 527 286 237 1649 413 1570 964 1731 194 645 639 735 182 656 641 1143 535 98 113 596 787 972 306 818 657 1202 321 1327 753 1088 122 1823 471 611 516 811 380 1548 872 973 509 1841 70...
output:
944 1 17 18 41 46 54 55 60 65 68 72 75 81 91 94 104 152 168 182 187 202 216 222 244 247 252 270 282 303 307 313 315 319 320 321 323 341 366 368 372 375 392 401 408 411 418 427 446 456 458 463 479 488 490 500 513 542 549 567 570 575 587 596 616 620 635 638 645 657 671 674 679 681 683 695 719 721 727 ...
result:
ok answer: 944, maximum: 944
Test #7:
score: -100
Wrong Answer
time: 1600ms
memory: 204072kb
input:
2000000 2000000 2000000 1203137 1030076 215220 238101 293102 491863 1260446 165178 1683989 1718181 1641329 1179380 708733 403707 1918936 574923 525651 11571 1169951 422281 1086376 303530 1286459 1692862 31854 394688 916288 273853 709758 1176923 1730408 1766172 1890708 588004 344339 283448 1676753 13...
output:
1020627 6 7 8 10 11 12 18 23 31 34 35 36 38 40 41 42 44 45 47 51 55 56 61 62 63 66 68 80 84 86 88 92 94 96 98 103 104 107 113 114 116 117 118 119 120 123 125 126 128 129 135 140 141 143 150 155 157 159 164 167 168 175 176 178 184 192 195 196 202 203 204 206 211 212 213 215 217 222 225 226 234 236 24...
result:
wrong answer found matching is too small: 1020627, maximum: 1088264