#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);
}
return dp[node];
}
void 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.assign(n, 0);
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)
{
return 0;
}
int i = p[0];
dp[node] -= dp[i];
dp[i] += dp[node];
if (now(i, visit(i), node) == 0)
{
visit(node);
}
}
else
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);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |