이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100001;
const int K = 20;
int n, m, k, x;
vector<pair<int, int>> g[MAXN];
int cnt[MAXN], up[MAXN][K], d[MAXN], tin[MAXN], ten[MAXN], timer = 1;
void dfs(int u, int p = 0) {
d[u] = d[p] + 1;
tin[u] = timer++;
up[u][0] = p;
for (int i = 1; i < K; i++) {
up[u][i] = up[up[u][i-1]][i-1];
}
for (auto [v, idx] : g[u]) {
if (v != p) {
dfs(v, u);
}
}
ten[u] = timer++;
}
bool is_ancestor(int u, int v)
{
return tin[u] <= tin[v] && ten[u] >= ten[v];
}
int lca(int u, int v)
{
if (is_ancestor(u, v))
return u;
if (is_ancestor(v, u))
return v;
for (int i = K-1; i >= 0; --i) {
if (up[u][i] && !is_ancestor(up[u][i], v))
u = up[u][i];
}
return up[u][0];
}
/*int lca(int a, int b) {
int i=19;
if(d[a] < d[b])swap(a, b);
while(i>=0 && d[a] > d[b]){
if(d[up[a][i]]>=d[b])a=up[a][i];
i--;
}
if(a==b)return a;
for(i=19;i>0;i--){
if(up[a][i]!=up[b][i]){
a=up[a][i];
b=up[b][i];
}
}
return up[a][0];
}*/
vector<int> ans;
int dfs2(int x, int p, int id){
for(auto [u, idx] : g[x]){
if(u!=p) cnt[x]+=dfs2(u, x, idx);
}
if(cnt[x]>=k && id)ans.push_back(id);
return cnt[x];
}
int main()
{
ios::sync_with_stdio(0); cin.tie(0);
cin >> n >> m >> k;
for (int i = 1; i <= n - 1; i++) {
int a, b; cin >> a >> b;
g[a].push_back({b,i});
g[b].push_back({a,i});
}
dfs(1);
for (int i = 1; i <= m; i++) {
cin >> x;
int a, b; cin >> a >> b;
int u = lca(a, b);
cnt[u] -= 2;
cnt[a]++;
cnt[b]++;
}
dfs2(1, 0, 0);
cout<<ans.size()<<'\n';
for(int i:ans)cout<<i<<' ';
cout<<endl;
return 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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |