求hack
查看原帖
求hack
895690
gghack_Nythix楼主2025/1/23 22:32

rt,感觉这玩意没有正确性但是过了 pretest 并且没有 fst。

# include <bits/stdc++.h>
# define int long long
# define pb push_back
using namespace std;
const int N = 3e5 + 5 , INF = 1e9;
int deg[N];
int n , cur , vis[N] , dep[N];
vector <int> g[N];
void dfs (int now , int fa , int col , int ing1 , int ing2) {
	vis[now] = col;
	for (auto x : g[now]) if (x != fa && x != ing1 && x != ing2) dfs (x , now , col , ing1 , ing2);
}
void dfs1 (int now , int fa) {
	dep[now] = dep[fa] + 1;
	for (auto x : g[now]) if (x != fa) dfs1 (x , now);
}
void solve () {
	cin >> n , cur = 0;
	for (int i = 1;i <= n;++i) g[i].clear() , vis[i] = 0 , deg[i] = 0 , dep[i] = 0;
	for (int i = 1;i < n;++i) {
		int u , v;
		cin >> u >> v;
		deg[u] ++ , deg[v] ++;
		g[u].pb (v) , g[v].pb (u);
	}
	int id = 0;
	deg[0] = -1;
	dfs1(1 , 1);
	for (int i = 1;i <= n;++i) if (deg[i] > deg[id] || (deg[i] == deg[id] && dep[i] > dep[id])) id = i;
	for (auto x : g[id]) --deg[x];
	int ing1 = id;
	deg[0] = -1 , deg[id] = -1 , id = 0;
	for (int i = 1;i <= n;++i) if (deg[i] > deg[id] || (deg[i] == deg[id] && dep[i] > dep[id])) id = i;
	for (int i = 1;i <= n;++i) if (!vis[i] && i != ing1 && i != id) dfs (i , -1 , ++cur , ing1 , id);
	return cout << cur << '\n' , void();
}
signed main () {
	ios::sync_with_stdio(false) , cin.tie(0) , cout.tie(0);
	int T;
	cin >> T;
	while (T--) solve();
}
2025/1/23 22:32
加载中...