Submission #826236

#TimeUsernameProblemLanguageResultExecution timeMemory
826236vnm06Toy Train (IOI17_train)C++14
11 / 100
566 ms1748 KiB
#include<bits/stdc++.h>
#include "train.h"

using namespace std;

int n, m;
bool isC[5005], used[5005];
vector<int> gr[5005], rev_gr[5005];

void dfs(int v)
{
    int brs=gr[v].size();
    for(int i=0; i<brs; i++)
    {
        int nv=gr[v][i];
        if(used[nv]) continue;
        used[nv]=1;
        dfs(nv);
    }
}

vector<int> ans;

void dfs2(int v)
{
    ans[v-1]=1;
    int brs=rev_gr[v].size();
    for(int i=0; i<brs; i++)
    {
        int nv=rev_gr[v][i];
        if(ans[nv-1]) continue;
        dfs2(nv);
    }
}

std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v)
{
    n=a.size();
    ans.resize(n);
    for(int i=0; i<n; i++) ans[i]=0;
    m=u.size();
    for(int i=0; i<n; i++) if(r[i]) isC[i+1]=1;
    for(int i=0; i<m; i++)
    {
        gr[u[i]+1].push_back(v[i]+1);
        rev_gr[v[i]+1].push_back(u[i]+1);
    }
    for(int i=1; i<=n; i++)
    {
        if(isC[i])
        {
            dfs(i);
            if(!used[i]) isC[i]=0;
            memset(used, 0, sizeof(used));
        }
    }
    for(int i=1; i<=n; i++)
    {
        if(isC[i]) dfs2(i);
    }
    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...