深搜染色
2026-08-20 09:53:32
发布于:广东
3阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll N = 2e5+5;
ll n;
vector<ll>a[N];
ll color[N];// =0没染色 =1代表黑 =2代表白
ll cnt1,cnt2;//记录两大颜色各有多少个
void dfs(ll idx,ll col)//当前位置和颜色
{
color[idx] = col;//记录当前位置的颜色
col == 1?cnt1++:cnt2++;//对应颜色数量+1;
for(auto to:a[idx])
if(color[to]==0)//对应的点没染色
dfs(to,3-col);//3-col 就是1变2 2变1
}
int main()
{
cin>>n;
for(ll i = 1;i<=n-1;i++)
{
ll u,v;cin>>u>>v;
a[u].push_back(v);
a[v].push_back(u);
}
dfs(1,1);
for(int i = 1;i<=n;i++)//看他是什么颜色,打印对应颜色的数量
color[i] == 1?cout<<cnt1<<" ":cout<<cnt2<<" ";
return 0;
}
这里空空如也


有帮助,赞一个