
#include <bits/stdc++.h>
using namespace std;
void add_edge(vector<int> adj[],
int u, int v)
{
adj[u].push_back(v);
adj[v].push_back(u);
}
void dfs(vector<int>& parent,
vector<int> adj[],
int u,
int par = -1)
{
parent[u] = par;
for (auto child : adj[u]) {
if (child != par)
dfs(parent, adj, child, u);
}
}
void countSmallerAncestors(
vector<int> adj[], int n)
{
vector<int> parent(int(1e5), 0);
dfs(parent, adj, 1);
for (int i = 1; i <= n; i++) {
int node = i;
int cnt = 0;
while (parent[node] != -1) {
if (parent[node] < i)
cnt += 1;
node = parent[node];
}
cout << cnt << " ";
}
}
int main()
{
int N = 6;
vector<int> adj[int(1e5)];
add_edge(adj, 1, 5);
add_edge(adj, 1, 4);
add_edge(adj, 4, 6);
add_edge(adj, 5, 3);
add_edge(adj, 5, 2);
countSmallerAncestors(adj, N);
return 0;
}
0 comments:
Post a Comment