Submission #1174191

#TimeUsernameProblemLanguageResultExecution timeMemory
1174191nhphucAmusement Park (JOI17_amusement_park)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#include "Joi.h"

using namespace std;

namespace {
    const int N = 10007;

    int par[N], mess[N], leaf;
    bool ing[N];
    vector<int> g[N], adj[N], group[N];

    void bfs (int n, int src){
        fill(par, par + n, -1);
        queue<int> q;
        vector<int> d(n, -1);
        d[src] = 0;
        q.push(src);
        while (q.size()){
            int u = q.front(); q.pop();
            for (int v : g[u]){
                if (d[v] == -1){
                    par[v] = u;
                    d[v] = d[u] + 1;
                    q.push(v);
                }
            }
        }
        return;
    }

    void init (int n){
        fill(mess, mess + n, -1);
        for (int i = 0; i < n; ++i){
            g[i].clear();
            adj[i].clear();
        }
    }

    void dfs (int u, int p = -1){
        int child = 0;
        for (int v : adj[u]){
            if (v != p && ing[v]){
                ++child;
                dfs(v, u);
            }
        }
        if (child == 0){
            leaf = u;
        }
        return;
    }

    void Joi (int n, int m, int a[], int b[], long long x, int subtask){
        init(n);
        for (int i = 0; i < m; ++i){
            g[a[i]].push_back(b[i]);
            g[b[i]].push_back(a[i]);
        }
        bfs(n, 0);
        for (int i = 0; i < n; ++i){
            if (par[i] != -1){
                adj[i].push_back(par[i]);
                adj[par[i]].push_back(i);
            }
        }
        vector<int> st;
        {
            queue<int> q;
            q.push(0);
            while (st.size() < 60 && q.size()){
                int u = q.front(); q.pop();
                mess[u] = st.size();
                st.push_back(u);
                for (int v : adj[u]){
                    if (mess[v] == -1){
                        q.push(v);
                    }
                }
            }
        }
        queue<int> q;
        for (int u : st){
            group[u] = st;
            q.push(u);
        }
        while (q.size()){
            int u = q.front(); q.pop();
            for (int v : adj[u]){
                if (mess[v] == -1){
                    for (int uu : group[u]){
                        ing[uu] = true;
                    }
                    dfs(u);
                    group[v] = group[u];
                    for (int i = 0; i < group[v].size(); ++i){
                        if (group[v][i] == leaf){
                            group[v][i] = v;
                        }
                    }
                    mess[v] = leaf;
                    for (int uu : group[u]){
                        ing[uu] = false;
                    }
                }
            }
        }
        for (int i = 0; i < n; ++i){
            MessageBoard(i, (x >> mess[i] & 1));
        }
        return;
    }
}
#include <bits/stdc++.h>
#include "Ioi.h"

using namespace std;

namespace {
    const int N = 10007;

    int par[N], mess[N], leaf;
    bool ing[N];
    vector<int> g[N], adj[N], group[N];

    void bfs (int n, int src){
        fill(par, par + n, -1);
        queue<int> q;
        vector<int> d(n, -1);
        d[src] = 0;
        q.push(src);
        while (q.size()){
            int u = q.front(); q.pop();
            for (int v : g[u]){
                if (d[v] == -1){
                    par[v] = u;
                    d[v] = d[u] + 1;
                    q.push(v);
                }
            }
        }
        return;
    }

    void init (int n){
        fill(mess, mess + n, -1);
        for (int i = 0; i < n; ++i){
            g[i].clear();
            adj[i].clear();
        }
    }

    void dfs (int u, int p = -1){
        int child = 0;
        for (int v : adj[u]){
            if (v != p && ing[v]){
                ++child;
                dfs(v, u);
            }
        }
        if (child == 0){
            leaf = u;
        }
        return;
    }

    void dfs2 (int u, long long &answer, int p = -1){
        for (int v : adj[u]){
            if (ing[v] && v != p){
                answer += (1ll << mess[v]) * Move(v);
                dfs2(v, answer, u);
            }
        }
        if (p != -1){
            int f = Move(p);
        }
        return;
    }

    long long Ioi (int n, int m, int a[], int b[], int p, int v, int subtask){
        init(n);
        for (int i = 0; i < m; ++i){
            g[a[i]].push_back(b[i]);
            g[b[i]].push_back(a[i]);
        }
        bfs(n, 0);
        for (int i = 0; i < n; ++i){
            if (par[i] != -1){
                adj[i].push_back(par[i]);
                adj[par[i]].push_back(i);
            }
        }
        vector<int> st;
        {
            queue<int> q;
            q.push(0);
            while (st.size() < 60 && q.size()){
                int u = q.front(); q.pop();
                mess[u] = st.size();
                st.push_back(u);
                for (int v : adj[u]){
                    if (mess[v] == -1){
                        q.push(v);
                    }
                }
            }
        }
        queue<int> q;
        for (int u : st){
            group[u] = st;
            q.push(u);
        }
        while (q.size()){
            int u = q.front(); q.pop();
            for (int v : adj[u]){
                if (mess[v] == -1){
                    for (int uu : group[u]){
                        ing[uu] = true;
                    }
                    dfs(u);
                    group[v] = group[u];
                    for (int i = 0; i < group[v].size(); ++i){
                        if (group[v][i] == leaf){
                            group[v][i] = v;
                        }
                    }
                    mess[v] = leaf;
                    for (int uu : group[u]){
                        ing[uu] = false;
                    }
                }
            }
        }
        long long answer = (1ll << mess[p]) * v;
        for (int uu : group[p]){
            ing[uu] = true;
        }
        dfs2(p, answer);
        return answer;
    }
}

Compilation message (stderr)

# 1번째 컴파일 단계

/usr/bin/ld: /tmp/ccf6uua7.o: in function `main':
grader_joi.cpp:(.text.startup+0x20b): undefined reference to `Joi(int, int, int*, int*, long long, int)'
collect2: error: ld returned 1 exit status