Submission #1284309

#TimeUsernameProblemLanguageResultExecution timeMemory
1284309hynmjThe Ties That Guide Us (CEOI23_incursion)C++20
Compilation error
0 ms0 KiB
#include "incursion.h"
#include <bits/stdc++.h>
using namespace std;
const int N = 4.6e4;
vector<int> graph[N];
vector<int> m;
int dp[N];
int dist[N];
bool located;
int calc(int node, int parent = 0)
{
    dp[node] = 1;
    dist[node] = dist[parent] + 1;
    for (int i : graph[node])
    {
        if (i == parent)
            continue;
        dp[node] += calc(i, node);
    }
}
int up(int node, int parent = 0)
{
    m[node - 1] = 0;
    vector<pair<int, int>> p;
    for (int i : graph[node])
    {
        p.push_back({dp[i], i});
    }
    sort(p.begin(), p.end());
    for (int i = 0; i < p.size(); i++)
    {
        if (p[i].second == parent)
        {
            m[node - 1] = i;
            if (m[node - 1] > 1)
                m[node - 1] = 1;
        }
    }
    for (int i : graph[node])
    {
        if (i == parent)
            continue;
        dp[node] -= dp[i];
        dp[i] += dp[node];
        up(i, node);
        dp[i] -= dp[node];
        dp[node] += dp[i];
    }
}

std::vector<int> mark(std::vector<std::pair<int, int>> &G, int safe)
{
    int n = G.size();
    m.resize(n);
    for (auto i : G)
    {
        graph[i.first].push_back(i.second);
        graph[i.second].push_back(i.first);
    }
    calc(safe);
    up(safe);
    return m;
}
vector<int> possibilites(int node, int t)
{
    vector<pair<int, int>> p;

    for (int i : graph[node])
    {
        p.push_back({dp[i], i});
    }
    sort(p.begin(), p.end());
    vector<int> possible;
    if (t == 1)
        t = p.size() - 1;
    for (auto i : p)
    {
        if (p[t].first == i.first)
        {
            possible.push_back(i.second);
        }
    }
    return possible;
}
int now(int node, int t, int parent)
{
    vector<int> p = possibilites(node,t);
    if (p.size() == 0)
    {
        if (p[0] ==parent)
        {
            visit(parent);
            located = 1;
            return 1;
        }
        int i = p[0];
        dp[node] -= dp[i];
        dp[i] += dp[node];
        now(i, visit(i), node);
    }
    for (int i = p.size()-1; i >=0;i--)
    {
        dp[node] -= dp[i];
        dp[i] += dp[node];
        if (now(p[i], visit(p[i]), node))
        {
            return 1;
        }
        visit(node);
        dp[i] -= dp[node];
        dp[node] += dp[i];
    }
    located = 1;
    return 1;
}
 void locate(std::vector<std::pair<int, int>> G, int curr, int t)
{

    int n = G.size();
    m.resize(n + 1);
    for (auto i : G)
    {
        graph[i.first].push_back(i.second);
        graph[i.second].push_back(i.first);
    }
    calc(curr);
    now(curr,t,0);
}

Compilation message (stderr)

incursion.cpp: In function 'int calc(int, int)':
incursion.cpp:20:1: warning: no return statement in function returning non-void [-Wreturn-type]
   20 | }
      | ^
incursion.cpp: In function 'int up(int, int)':
incursion.cpp:49:1: warning: no return statement in function returning non-void [-Wreturn-type]
   49 | }
      | ^
/usr/bin/ld: /tmp/cckcRlSi.o: in function `main':
interface.cpp:(.text.startup+0x194): undefined reference to `mark(std::vector<std::pair<int, int>, std::allocator<std::pair<int, int> > >, int)'
collect2: error: ld returned 1 exit status