Submission #1060383

# Submission time Handle Problem Language Result Execution time Memory
1060383 2024-08-15T13:33:19 Z Zicrus Toy Train (IOI17_train) C++17
0 / 100
2000 ms 4896 KB
#include <bits/stdc++.h>
#include "train.h"
using namespace std;

typedef long long ll;

vector<unordered_set<ll>> adj, revAdj;
vector<bool> vst;
bool poss = false;
vector<int> a;

void dfs1(ll cur, ll root) {
    vst[cur] = true;
    for (auto &e : revAdj[cur]) {
        if (e == root) poss = true;
        if (vst[e]) continue;
        dfs1(e, root);
    }
}

void dfs2(ll cur, ll par, bool can) {
    vst[cur] = true;
    if (par == -1) {
        for (auto &e : revAdj[cur]) {
            if (vst[e]) continue;
            dfs2(e, cur, can);
        }
        return;
    }

    if (a[cur] != can) {
        if (adj[cur].size() > 1) {
            adj[cur].erase(par);
            for (auto &e : revAdj[cur]) {
                if (vst[e]) continue;
                dfs2(e, cur, !can);
            }
        }
        else {
            for (auto &e : revAdj[cur]) {
                if (vst[e]) continue;
                dfs2(e, cur, can);
            }
        }
    }
    else {
        adj[cur].clear();
        adj[cur].insert(par);
        for (auto &e : revAdj[cur]) {
            if (vst[e]) continue;
            dfs2(e, cur, can);
        }
    }
}

vector<int> who_wins(vector<int> a1, vector<int> r, vector<int> u, vector<int> v) {
    a = a1;
    ll n = a.size(), m = u.size();
	vector<int> res(n);
	adj = vector<unordered_set<ll>>(n);
	revAdj = vector<unordered_set<ll>>(n);
    for (int i = 0; i < m; i++) {
        adj[u[i]].insert(v[i]);
        revAdj[v[i]].insert(u[i]);
    }

    ll charge = 0;
    for (int i = 0; i < n; i++) {
        if (r[i]) {
            charge = i;


	adj = vector<unordered_set<ll>>(n);
	revAdj = vector<unordered_set<ll>>(n);
    for (int i = 0; i < m; i++) {
        adj[u[i]].insert(v[i]);
        revAdj[v[i]].insert(u[i]);
    }
            vst = vector<bool>(n);
            dfs2(charge, -1, true);
            revAdj = vector<unordered_set<ll>>(n);
            for (int i = 0; i < n; i++) {
                for (auto &e : adj[i]) {
                    revAdj[e].insert(i);
                }
            }
            vst = vector<bool>(n);
            poss = false;
            dfs1(charge, charge);
            vector<bool> vst2 = vst;
            if (poss) {
                for (int j = 0; j < n; j++) {
                    if (!vst2[j]) continue;
                    res[j] = true;
                }
            }
        }
    }

    

	return res;
}
# Verdict Execution time Memory Grader output
1 Execution timed out 2044 ms 3120 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 348 KB 3rd lines differ - on the 8th token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2081 ms 4896 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2033 ms 4164 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 20 ms 4148 KB 3rd lines differ - on the 2nd token, expected: '0', found: '1'
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Execution timed out 2044 ms 3120 KB Time limit exceeded
2 Halted 0 ms 0 KB -