社区讨论

所以为什么 cf 运行结果和本地不一样???

学术版参与者 5已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mkmovvi1
此快照首次捕获于
2026/01/20 22:28
4 周前
此快照最后确认于
2026/01/24 15:00
4 周前
查看原帖
CF1009F 中,我提交了如下代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int n,h[1000005],son[1000005],f[1000005],ans[1000005];
vector<int> t[1000005],w[1000005];
void dfs1(int x,int fa){
	f[x]=fa;
	for(auto it:w[x]){
		if(it==fa)continue;
		dfs1(it,x);
		if(h[it]>=h[son[x]])son[x]=it,h[x]=h[it]+1;
	}
}
void dfs2(int x){
	if(son[x]){
		dfs2(son[x]);
		swap(t[x],t[son[x]]);
		t[x].push_back(1);
		ans[x]=ans[son[x]];
		if(t[x][ans[x]]==1)ans[x]=h[x];
		for(auto it:w[x]){
			if(it==f[x]||it==son[x])continue;
			dfs2(it);
			for(int i=h[x];i>=0;i--){
				int tt=i+h[x]-h[it]-1;
				t[x][tt]+=t[it][i];
				if(t[x][tt]>t[x][ans[x]]||(t[x][tt]==t[x][ans[x]]&&tt>ans[x]))ans[x]=tt;
			}
		}
	}else{
		t[x].push_back(1);
		ans[x]=0;
	}
}
int main(){
	cin>>n;
	for(int i=1,x,y;i<n;i++){
		cin>>x>>y;
		w[x].push_back(y);
		w[y].push_back(x);
	}
	dfs1(1,0);
	dfs2(1);
	for(int i=1;i<=n;i++)cout<<h[i]-ans[i]<<"\n";
	return 0;
}
本地和洛谷测样例 2 能过,但是 cf 上 ....
https://codeforces.com/contest/1009/submission/358936261
求问为什么?

回复

6 条回复,欢迎继续交流。

正在加载回复...