Submission #1306121

#TimeUsernameProblemLanguageResultExecution timeMemory
1306121fafnirWerewolf (IOI18_werewolf)C++20
Compilation error
0 ms0 KiB
#define LOCAL 1

#include <bits/stdc++.h>
#ifndef LOCAL
#include "werewolf.h"
#endif
using namespace std;

#define REP(i, n) for (int i = 0; i < (n); i++)

// Calculate DP
// dp[u] := True if its possible to find path S-->u s.t. nodes are all in range
//          [lo,hi]
vector<bool> calc_dp(int S, vector<vector<int>>& adjList, int lo, int hi) {
    const int N = adjList.size();
    vector<bool> dp(N, false);
    dp[S] = S >= lo && S <= hi;

    queue<int> q;
    q.push(S);
    while (!q.empty()) {
        int u = q.front();
        q.pop();

        if (!dp[u]) {continue;}

        for (auto& v : adjList[u]) {
            if (v >= lo && v <= hi && !dp[v]) {
                dp[v] = true;
                q.push(v);
            }
        }
    }

    return dp;
}

vector<int> check_validity(int N, vector<int> X, vector<int> Y,
                            vector<int> S, vector<int> E,
                            vector<int> L, vector<int> R) {
    const int Q = L.size();
    const int M = X.size();

    vector<vector<int>> adjList(N);
    REP(i, M) {
        adjList[X[i]].push_back(Y[i]);
        adjList[Y[i]].push_back(X[i]);
    }

    vector<int> r(Q, 0);
    REP(i, Q) {
        int s = S[i];
        int e = E[i];
        int li = L[i];
        int ri = R[i];

        if (max(s, e) < li) {
            auto dp = calc_dp(s, adjList, 0, li-1);
            r[i] = dp[e];
        } else if (min(s, e) > ri) {
            auto dp = calc_dp(s, adjList, ri+1, N-1);
            r[i] = dp[e];
        } else {
            if (s > e) {swap(s, e);}

            auto dp0 = calc_dp(s, adjList, 0, ri);
            auto dp1 = calc_dp(e, adjList, li, N-1);

            for (int u = 0; u < N; ++u) {
                if (dp0[u] && dp1[u]) {r[i] = 1; break;}
            }
        }
    }

    return r;
}

int main() {
    int N = 6;
    vector<int> X{5,1,1,3,3,5};
    vector<int> Y{1,2,3,4,0,2};

    vector<int> S{4,4,5};
    vector<int> E{2,2,4};
    vector<int> L{1,2,3};
    vector<int> R{2,2,4};

    auto r = check_validity(N, X, Y, S, E, L, R);
    for_each(r.begin(), r.end(), [](int x) {cout << x << ' ';});
    cout << '\n';

    return 0;
}

Compilation message (stderr)

/usr/bin/ld: /tmp/ccY0PzSx.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccz9PiZu.o:werewolf.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status