~~抱泠~~爆零 * 2
```
#include<bits/stdc++.h>
#define ll long long
#define rll register ll
#define F(i,a,b) for(rll i=a;i<=b;i++)
#define Fdn(i,a,b) for(rll i=a;i>=b;i--)
#define int ll
#define itn int
#define umap unordered_map
#define uset unordered_set
#define ld long double
#define pii pair<int,int>
#define pll pair<long long,long long>
#define pb push_back
using namespace std;
const int inf = 0x3f3f3f3f,mod = 1e9 + 7;
const int maxn = 5e4 + 7,Logn = 17;
int n,q;
vector<int> G[maxn];
int sum[maxn];
int ans;
int f[maxn][Logn];
int dep[maxn];
inline void dfs(int u, int fa){
dep[u] = dep[fa] + 1;
f[u][0] = fa;
for(int i = 1; (1 << i) < dep[u]; i++)
f[u][i] = f[f[u][i - 1]][i - 1];
for(auto v : G[u])
if(v != fa)
dfs(v, u);
}
inline int lca_get(int u,int v){
if(dep[u] < dep[v])
swap(u, v);
Fdn(i, 16, 0)
if(dep[f[u][i]] >= dep[v])
u = f[u][i];
if(u == v)
return u;
Fdn(i, 16, 0)
if(f[u][i] != f[v][i])
u = f[u][i],v = f[v][i];
return f[u][0];
}
inline int getans(int u,int fa){
for(int i = 1; (1 << i) < dep[u]; i++)
f[u][i] = f[f[u][i - 1]][i - 1];
for(auto v : G[u]){
if(v == fa)
continue;
getans(v, u);
sum[u] += sum[v];
}
ans = max(ans, sum[u]);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> q;
F(i, 1, n - 1){
int u, v;
cin >> u >> v;
G[u].pb(v), G[v].pb(u);
}
dfs(1, 0);
F(i,1,q){
int u, v;
cin >> u >> v;
int l = lca_get(u, v);
sum[u]++, sum[v]++, sum[l]--, sum[f[l][0]]--;
}
getans(1, 0);
cout << ans;
return 0;
}
by Snowy_Fujisaki @ 2023-09-28 09:28:13
应该是洛谷炸了
我看你代码没问题
交了一下ac了
你再交一次
by hytmnt @ 2023-09-28 10:17:12
你编码不规范的话开氧会re
by hytmnt @ 2023-09-28 10:18:58
你好像有个int型函数没返回值啥的
by hytmnt @ 2023-09-28 10:20:32
你把getans前面的int改成void就行了
by hytmnt @ 2023-09-28 10:22:48
@[hytmnt](/user/363687) @[hytmnt](/user/363687) thx
by Snowy_Fujisaki @ 2023-09-28 14:54:39