//这个题求满足条件的最佳方案
//染色问题求满足条件的所有方案数量
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e5+9;
ll n,head[N],to[N<<1],nxt[N<<1],cnt=0;
ll dp[N][2];
inline void add(int x,int y)
{
nxt[++cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
return ;
}
void dfs(int x,int fa)
{
for(int i=head[x];i;i=nxt[i])
{
int y=to[i];
if(y==fa)continue;
dfs(y,x);//忘dfs导致答案错误-_-;
dp[x][1]+=dp[y][0];
dp[x][0]+=max(dp[y][1],dp[y][0]);
}
dp[x][1]++;//在x选的时候+1;
return ;
}
int main()
{
cin>>n;
for(int i=2;i<=n;i++)
{
int u,v;cin>>u>>v;
add(u,v);add(v,u);
}
dfs(1,0);
cout<<max(dp[1][0],dp[1][1])<<endl;
return 0;
}
树的最大独立集
于 2025-01-20 11:54:24 首次发布
3074

被折叠的 条评论
为什么被折叠?



