Submission #612429

# Submission time Handle Problem Language Result Execution time Memory
612429 2022-07-29T14:55:58 Z MohamedAliSaidane Toy Train (IOI17_train) C++14
0 / 100
2000 ms 99660 KB
#include <bits/stdc++.h>
//#include "train.h"
    using namespace std;

    typedef long long ll;
    typedef double ld;
    typedef pair<int,int> pii;
    typedef pair<ll,ll> pll;

    typedef vector<int> vi;
    typedef vector<ll> vll;
    typedef vector<pii> vpi;
    typedef vector<pll> vpl;

    #define pb push_back
    #define popb pop_back
    #define all(x) (x).begin(),(x).end()

    #define ff first
    #define ss second

    const int nax = 5004;
    const int MOD = 1e9 + 7;
    int C[nax];
    vi adj[nax];
    vi rev_adj[nax];
    int A[nax];
    int n, m;
    int dp[nax][nax];
    int vis[nax], self[nax], ok[nax];
    vi order, comp;
    void dfs(int x)
    {
        vis[x] = 1;
        for(auto e: adj[x])
        {
            if(!vis[e])
                dfs(e);
        }
        order.pb(x);
    }
    void dfs1(int x)
    {
        vis[x] = 1;
        for(auto e: rev_adj[x])
            if(!vis[e])
                dfs1(e);
        comp.pb(x);
    }
    vi who_wins(vi a, vi r, vi u, vi v)
    {
        memset(dp, -1,sizeof(dp));
        n = a.size();
        m = u.size();
        for(int i = 0 ; i < n; i++)
        {
            A[i] = a[i];
            C[i] = r[i];
        }
        for(int i=  0; i < m; i++)
        {
            adj[u[i]].pb(v[i]);
            rev_adj[v[i]].pb(u[i]);
            if(u[i] == v[i])
                self[u[i]] = 1;
        }
        for(int i = 0 ; i <  n;i ++)
            if(!vis[i])
                dfs(i);
        reverse(all(order));
        memset(vis, false,sizeof(vis));
        for(auto e: order)
        {
            if(vis[e])
                continue;
            comp.clear();
            dfs1(e);
            if(comp.size() > 1)
            {
                for(auto e: comp)
                    ok[e] = 1;
            }
            else if(self[comp[0]])
                ok[comp[0]] = 1;
        }
        queue<pii> q;
        int sp[n + 1];
        for(int i = 0; i < n; i++)
        {
            if(ok[i] && C[i])
            {
                sp[i] = 0;
                q.push({i, 0});
            }
            else
                sp[i] = MOD;
        }
        while(!q.empty())
        {
            int node = q.front().ff;
            int dis = q.front().ss;
            for(auto e: rev_adj[node])
            {
                if(sp[e] > dis + 1)
                {
                    sp[e] = dis + 1;
                    q.push({e, dis + 1});
                }
            }
        }
        vi ans;
        for(int i=  0 ; i < n; i ++ )
        {
            if(sp[i] <= n)
                ans.pb(1);
            else
                ans.pb(0);
        }
        return ans;

    }
# Verdict Execution time Memory Grader output
1 Execution timed out 2033 ms 99276 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2064 ms 98452 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 49 ms 99660 KB Output is correct
2 Correct 42 ms 99612 KB Output is correct
3 Correct 42 ms 99660 KB Output is correct
4 Execution timed out 2076 ms 99528 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2082 ms 99416 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2082 ms 99532 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2033 ms 99276 KB Time limit exceeded
2 Halted 0 ms 0 KB -