QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#402500 | #1454. Um nik's Algorithm | do_while_true | WA | 0ms | 3872kb | C++20 | 2.5kb | 2024-04-30 17:46:41 | 2024-04-30 17:46:42 |
Judging History
answer
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<ctime>
#include<random>
#include<array>
#include<assert.h>
#define pb emplace_back
#define mp make_pair
#define fi first
#define se second
#define dbg(x) cerr<<"In Line "<< __LINE__<<" the "<<#x<<" = "<<x<<'\n'
#define dpi(x,y) cerr<<"In Line "<<__LINE__<<" the "<<#x<<" = "<<x<<" ; "<<"the "<<#y<<" = "<<y<<'\n'
#define DE(fmt,...) fprintf(stderr, "Line %d : " fmt "\n",__LINE__,##__VA_ARGS__)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int>pii;
typedef pair<ll,int>pli;
typedef pair<ll,ll>pll;
typedef pair<int,ll>pil;
typedef vector<int>vi;
typedef vector<ll>vll;
typedef vector<pii>vpii;
typedef vector<pll>vpll;
template<typename T>T cmax(T &x, T y){return x=x>y?x:y;}
template<typename T>T cmin(T &x, T y){return x=x<y?x:y;}
template<typename T>
T &read(T &r){
r=0;bool w=0;char ch=getchar();
while(ch<'0'||ch>'9')w=ch=='-'?1:0,ch=getchar();
while(ch>='0'&&ch<='9')r=r*10+(ch^48),ch=getchar();
return r=w?-r:r;
}
template<typename T1,typename... T2>
void read(T1 &x,T2& ...y){read(x);read(y...);}
const int N=2000010;
mt19937 rnd(12321);
int A,B,m;
vpii eg[N];
int L[N],R[N];
int pos[N],pre[N],dis[N],ban[N];
int ans;
int solve(){
queue<int>q;
for(int i=1;i<=A;i++)dis[i]=N,pos[i]=pre[i]=ban[i]=0;
for(int i=1;i<=A;i++)
if(!R[i]){
q.push(i);
dis[i]=1;
}
while(!q.empty()){
int x=q.front();q.pop();
for(auto i:eg[x]){
int y=i.fi;
if(ban[y])continue;
if(!L[y]){
pos[x]=y;
ban[y]=1;
break;
}
int t=L[y];
if(dis[t]>dis[x]+1){
dis[t]=dis[x]+1;
pre[t]=x;
q.push(t);
}
}
}
int md=N;
for(int i=1;i<=A;i++)if(pos[i])cmin(md,dis[i]);
for(int i=1;i<=A;i++){
if(pos[i]){
int x=i,lst=pos[i];
while(x){
int tmp=R[x];
R[x]=lst;
L[lst]=x;
lst=tmp;
x=pre[x];
}
++ans;
}
}
if(md==N)return 0;
return 1;
}
signed main(){
#ifdef do_while_true
assert(freopen("data.in","r",stdin));
assert(freopen("data.out","w",stdout));
#endif
read(A,B,m);
for(int i=1;i<=m;i++){
int u,v;read(u,v);
eg[u].pb(v,i);
}
while(1.0*clock()/CLOCKS_PER_SEC<3.3){
if(!solve())
break;
}
cout<<ans<<'\n';
for(int i=1;i<=A;i++)if(R[i])
for(auto [j,id]:eg[i])
if(j==R[i]){
cout<<id<<'\n';
break;
}
#ifdef do_while_true
// cerr<<'\n'<<"Time:"<<1.0*clock()/CLOCKS_PER_SEC*1000<<" ms"<<'\n';
#endif
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3688kb
input:
3 2 4 1 1 2 1 3 1 3 2
output:
2 1 4
result:
ok answer: 2, maximum: 2
Test #2:
score: 0
Accepted
time: 0ms
memory: 3696kb
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: -100
Wrong Answer
time: 0ms
memory: 3872kb
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 205 737 383 8889 137 819 776 2426 1620 233 28 1840 845 1534 1401 459 1077 70 454 1699 8784 1816 598 509 75 12 1332 83 41 746 244 2718 1272 240 697 324 2027 195 759 3 7582 1520 215 838 279 2182 204 297 550 1182 2907 45 1645 4666 3959 105 318 1022 27 187 234 1031 216 7092 1484 1829 157 153 957 50...
result:
wrong output format Unexpected end of file - int32 expected