Homework Introduction

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
int n,f[N],dis[N][3],son[N][3],G[N];
vector<int>e[N];
void dfs(int x,int fa){
	for(auto v:e[x]){
		if(v==fa)continue;
		dfs(v,x);
		f[x]=max(f[x],f[v]+1);
		if(dis[v][0]+1>dis[x][1]){
			dis[x][1]=dis[v][0]+1;
			son[x][1]=v;
		}
		if(dis[x][1]>dis[x][0]){
			swap(dis[x][1],dis[x][0]);
			swap(son[x][1],son[x][0]);
		}
	}
}
void dfs1(int x,int fa){
	if(x==1)G[x]=0;
	else{
		G[x]=G[fa]+1;
		if(son[fa][0]==x){
			G[x]=max(G[x],dis[fa][1]+1);
		}else{
		G[x]=max(G[x],dis[fa][0]+1);
		}
	}
	for(auto v:e[x]){
		if(v==fa)continue;
		dfs1(v,x);
	}
}
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		e[x].push_back(y);
		e[y].push_back(x);
	}
	dfs(1,0);
		dfs1(1,0);
	for(int i=1;i<=n;i++){
		cout<<max(f[i],G[i])<<" ";
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4+5;
int n,f[N][3];
vector<int>e[N];
void dfs(int x,int fa){
	f[x][0] = 1;
	int sum = 0;
	for(auto v:e[x]){
		if(v==fa)continue;
		dfs(v,x);
		f[x][0] += f[v][2];
		sum+=f[v][1];
		f[x][2] += f[v][1];
	}
	f[x][1] = 1e9;
	for(auto v:e[x]){
		if(v==fa)continue;
		f[x][1] = min(f[x][1],f[v][0]+sum-f[v][1]);
	}
 	for(int i=1;i<=2;i++){
		f[x][i] = min(f[x][i],f[x][i-1]);
	}
}
int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int x,y;
		cin>>x>>y;
		e[x].push_back(y);
		e[y].push_back(x);
	}
	dfs(1,0);
	cout<<f[1][1]<<endl;
	return 0;
}
Status
Done
Problem
15
Open Since
2026-3-19 0:00
Deadline
2026-3-27 23:59
Extension
24 hour(s)