Submission #1218794

#TimeUsernameProblemLanguageResultExecution timeMemory
1218794marizaToy Train (IOI17_train)C++20
0 / 100
1176 ms1456 KiB
#include "train.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll N=5000;

vector<ll> g[N];
bool o[N];

bool x[N];
bool vis[N];
bool dfs(ll curr){
    // cout<<curr<<endl;
    if(vis[curr]) return x[curr];
    vis[curr]=1;
    
    bool ans;
    if(o[curr]==1){
        ans=0;
        for(auto nxt:g[curr]){
            ans|=dfs(nxt);
        }
    }
    else{
        ans=1;
        for(auto nxt:g[curr]){
            ans&=dfs(nxt);
        }
    }
    return x[curr]=ans;
}

vector<int> who_wins(vector<int> a, vector<int> r, vector<int> u, vector<int> v) {
    ll n=a.size(), m=u.size();
    for(ll i=0; i<n; i++){
        o[i]=a[i];
        g[i].clear();
    }
    for(ll i=0; i<m; i++){
        g[u[i]].push_back(v[i]);
    }

    vector<int> ans(n,0);
    for(ll i=0; i<n; i++){
        // cout<<"---"<<i<<"---"<<endl;
        if(!r[i]) continue;

        for(ll j=0; j<n; j++){
            x[j]=0;
            vis[j]=0;
        }

        x[i]=1;
        dfs(i);

        for(ll j=0; j<n; j++){
            vis[j]=0;
        }
        vis[i]=1;
        for(ll j=0; j<n; j++){
            if(!vis[j]) dfs(j);
        }

        for(ll j=0; j<n; j++){
            ans[j]|=x[j];
            // cout<<x[j]<<" ";
        }
        // cout<<endl;
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...