QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#409420#3171. Rooted Subtreesucup-team1716#WA 1ms5736kbC++141.5kb2024-05-12 03:07:302024-05-12 03:07:30

Judging History

你现在查看的是最新测评结果

  • [2024-05-12 03:07:30]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5736kb
  • [2024-05-12 03:07:30]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e5;

int n, Q;

struct EDGE { int nxt, to; } edge[MAXN * 2 + 5];
int head[MAXN + 5], tot;
inline void add_edge(int u, int v) { edge[++tot].nxt = head[u]; edge[tot].to = v; head[u] = tot; }

int fa[MAXN + 5], sz[MAXN + 5], son[MAXN + 5], dep[MAXN + 5];
void dfs1(int u) {
	sz[u] = 1;
	for (int i = head[u]; i; i = edge[i].nxt) {
		int v = edge[i].to;
		if (v == fa[u])
			continue;
		fa[v] = u;
		dep[v] = dep[u] + 1;
		dfs1(v);
		sz[u] += sz[v];
		if (!son[u] || sz[v] > sz[son[u]])
			son[u] = v;
	}
}
int top[MAXN + 5], dfn[MAXN + 5], ofn[MAXN + 5], rev[MAXN + 5], cnt_dfn;
void dfs2(int u, int t) {
	top[u] = t;
	dfn[u] = ++cnt_dfn;
	rev[cnt_dfn] = u;
	if (son[u])
		dfs2(son[u], t);
	for (int i = head[u]; i; i = edge[i].nxt) {
		int v = edge[i].to;
		if (v == fa[u] || v == son[u])
			continue;
		dfs2(v, v);
	}
	ofn[u] = cnt_dfn;
}
int get_lca(int u, int v) {
	while (top[u] != top[v]) {
		if (dep[top[u]] < dep[top[v]])
			swap(u, v);
		u = fa[top[u]];
	}
	return (dep[u] < dep[v]) ? u : v;
}

int main() {
	cin >> n >> Q;
	for (int i = 1; i <= n - 1; ++i) {
		int u, v;
		cin >> u >> v;
		add_edge(u, v);
		add_edge(v, u);
	}
	
	dfs1(1);
	dfs2(1, 1);
	
	for (int i = 1; i <= n; ++i) cout << dep[i] << " "; cout << endl;
	
	while (Q--) {
		int u, v;
		cin >> u >> v;
		int lca = get_lca(u, v);
		int len = dep[u] + dep[v] - 2 * dep[lca] + 1;
		cout << n - len + ((long long)len + 1) * len / 2 << endl;
	}
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 5736kb

input:

5 2
1 2
2 3
2 4
4 5
1 3
4 5

output:

0 1 2 2 3 
8
6

result:

wrong answer 1st lines differ - expected: '8', found: '0 1 2 2 3 '