Submission #443026

# Submission time Handle Problem Language Result Execution time Memory
443026 2021-07-09T13:40:38 Z leaked Marriage questions (IZhO14_marriage) C++14
22 / 100
509 ms 3020 KB
#include <bits/stdc++.h>
//#pragma GCC optimize("unroll-loops")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("-O3")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define vec vector
#define sz(x) ( int)x.size()
#define m_p make_pair
#define f first
#define s second
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
using namespace std;
typedef long long ll;
typedef pair<ll, int> pli;
typedef pair<int,ll> pil;
typedef pair<int,int> pii;
typedef unsigned long long ull;
auto rng=bind(uniform_int_distribution<int>(1,1000),mt19937(time(0)));
template<class T> bool umax(T &a,const T &b){return (a<b?a=b,1:0);}
template<class T> bool umin(T &a,const T &b){return (a>b?a=b,1:0);}
const int N=3e4+1;
const int K=165;
const int M=2001;
vec<int> g[M];
vec<int>gr[N];
int uk;
int vl[N];
int mt[N];
int wh[N];
int u[N],tt,n,m;
int tl,tr;
bool kuhn(int v){
    if(u[v]==tt) return 0;
    u[v]=tt;
    for(auto &z : g[v]){
        if(z<=tr && mt[z]==-1){
            mt[z]=v;
            vl[uk++]=v;
            return 1;
        }
    }
    for(auto &z : g[v]){
        if(z<=tr && kuhn(mt[z])){
            mt[z]=v;
            return 1;
        }
    }
    return 0;
}
int check(int l,int r){
    tl=l;tr=r;
    for(int i=0;i<uk;i++){
        mt[vl[i]]=-1;
    }
    uk=0;
    for(int i=0;i<m;i++){
        tt++;
        if(!kuhn(i)) return 0;
    }
    return 1;
}
bool kuhn2(int v){
    if(u[v]==tt) return 0;
    u[v]=tt;
    for(auto &z : gr[v]){
        if(mt[z]==-1 || kuhn2(mt[z])){
            mt[z]=v;
            return 1;
        }
    }
    return 0;
}
signed main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int k;
    cin>>n>>m>>k;
    for(int i=0;i<k;i++){
        int v,u;
        cin>>v>>u;--v;--u;
        gr[v].pb(u);
    }
    fill(mt,mt+m,-1);
    int l=n;
    int h=0;
    while(h!=m && l>0){
        l--;
        tt++;
        h+=kuhn2(l);
    }
    if(h!=m){
        cout<<0;
        return 0;
    }
    fill(mt,mt+n,-1);
    for(int i=n-1;i>l;i--){
        for(auto &z : gr[i]) g[z].pb(i);
    }
    int r=n-1;
    ll ans=0;
    for(int i=l;i>=0;i--){
//        cout<<i<<endl;
        for(auto &z : gr[i]) g[z].pb(i);
        while(check(i,r-1)) r--;
//        cout<<i<<' '<<r<<endl;
        ans+=(n-r);
    }
    cout<<ans;
    return 0;
}

/*
5
1 2
2 3
3 4
4 5
5 1
*/
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 972 KB Output isn't correct
2 Incorrect 1 ms 972 KB Output isn't correct
3 Incorrect 1 ms 972 KB Output isn't correct
4 Incorrect 1 ms 972 KB Output isn't correct
5 Correct 1 ms 972 KB Output is correct
6 Correct 1 ms 972 KB Output is correct
7 Incorrect 1 ms 972 KB Output isn't correct
8 Correct 1 ms 972 KB Output is correct
9 Correct 1 ms 972 KB Output is correct
10 Correct 1 ms 972 KB Output is correct
11 Correct 1 ms 972 KB Output is correct
12 Correct 1 ms 972 KB Output is correct
13 Incorrect 1 ms 972 KB Output isn't correct
14 Incorrect 1 ms 972 KB Output isn't correct
15 Incorrect 1 ms 972 KB Output isn't correct
16 Incorrect 1 ms 972 KB Output isn't correct
17 Incorrect 1 ms 972 KB Output isn't correct
18 Incorrect 1 ms 972 KB Output isn't correct
19 Incorrect 2 ms 1100 KB Output isn't correct
20 Incorrect 1 ms 1100 KB Output isn't correct
21 Correct 1 ms 972 KB Output is correct
22 Incorrect 1 ms 972 KB Output isn't correct
23 Incorrect 1 ms 1100 KB Output isn't correct
24 Incorrect 1 ms 1100 KB Output isn't correct
25 Incorrect 8 ms 1204 KB Output isn't correct
26 Incorrect 2 ms 1100 KB Output isn't correct
27 Correct 1 ms 1100 KB Output is correct
28 Incorrect 1 ms 972 KB Output isn't correct
29 Incorrect 5 ms 1152 KB Output isn't correct
30 Incorrect 4 ms 1100 KB Output isn't correct
31 Incorrect 29 ms 1660 KB Output isn't correct
32 Incorrect 9 ms 1100 KB Output isn't correct
33 Correct 1 ms 972 KB Output is correct
34 Incorrect 1 ms 1100 KB Output isn't correct
35 Incorrect 31 ms 2124 KB Output isn't correct
36 Incorrect 17 ms 2120 KB Output isn't correct
37 Incorrect 26 ms 1868 KB Output isn't correct
38 Incorrect 139 ms 2416 KB Output isn't correct
39 Incorrect 63 ms 1324 KB Output isn't correct
40 Correct 4 ms 1228 KB Output is correct
41 Incorrect 14 ms 1612 KB Output isn't correct
42 Incorrect 101 ms 1832 KB Output isn't correct
43 Incorrect 131 ms 1860 KB Output isn't correct
44 Incorrect 408 ms 2428 KB Output isn't correct
45 Incorrect 15 ms 2124 KB Output isn't correct
46 Incorrect 165 ms 2820 KB Output isn't correct
47 Incorrect 497 ms 2740 KB Output isn't correct
48 Incorrect 509 ms 2768 KB Output isn't correct
49 Incorrect 392 ms 3020 KB Output isn't correct
50 Incorrect 207 ms 1432 KB Output isn't correct