2D WA on #3
  • 板块学术版
  • 楼主kbzcz
  • 当前回复3
  • 已保存回复5
  • 发布时间2024/9/28 00:11
  • 上次更新2024/9/28 00:43:05
查看原帖
2D WA on #3
416192
kbzcz楼主2024/9/28 00:11
bool _Start;
#include <bits/stdc++.h>
using namespace std;
#define il inline
#define Tp template<typename T>
#define Ts template<typename T,typename... _T>
#define pb push_back
Tp il void read(T& x) {
	x=0;bool f=0;char c=getchar();
	for(;c<'0'||c>'9';c=getchar()) f|=c=='-';
	for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	x=(f?-x:x);
}Ts il void read(T& x,_T&... y) {read(x),read(y...);}
#define int long long
const int N=1e6+5;
int n,ans,mx,son[N],pre;
vector<int> e[N];
int dep[N],del[N],Fa[N];
vector<int> dis[N],lf[N];
void dfs(int x,int fa) {
	dep[x]=x==1?0:dep[fa]+1;
	Fa[x]=fa;
	mx=max(mx,dep[x]);
	dis[dep[x]].pb(x);
	for(auto y:e[x]) {
		if(y==fa) continue;
		dfs(y,x);
		son[x]++;
		del[x]+=del[y]+1;
	}
	if(!son[x]) lf[dep[x]].pb(x);
}
void erase(int x) {
	if(x==1) return ;
	pre++;
	son[Fa[x]]--;
	if(!son[Fa[x]]) erase(son[Fa[x]]);
}
bool _End;
signed main() {
	fprintf(stderr,"Memory: %.4lf Mib\n",(&_End-&_Start)/1048576.0);
	freopen("sp.in","r",stdin);
	int _;read(_);
	while(_--) {
		read(n);
		for(int i=1;i<=n;i++) e[i].clear(),dis[i].clear(),lf[i].clear(),son[i]=del[i]=0;
		for(int i=1;i<n;i++) {
			int x,y;read(x,y);
			e[x].pb(y),e[y].pb(x);
		}
		mx=0;
		dfs(1,0);
		pre=0,ans=n-1;
		for(int i=0;i<=n;i++) {
			int res=0;
			for(auto x:dis[i]) res+=del[x];
			ans=min(ans,res+pre);
			for(auto x:lf[i]) erase(x);
		}
		printf("%lld\n",ans);
	}
	return 0;
}

不知道为什么wa了/kel,有人能告诉原因或给个反例吗。

2024/9/28 00:11
加载中...