0
点赞
收藏
分享

微信扫一扫

E. Equal Tree Sums

晗韩不普通 2022-03-25 阅读 42

https://codeforces.com/contest/1656/problem/E
给每个顶点分配值,使得删除一个点后,剩下的各个连通块的权值和相等
黑白染色问题,黑的为负,白的为正,绝对值等于自己的度数,这样如果删除一个点后剩下的连通块的和要么全为1或全为-1

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+25;
typedef long long ll;
int vis[maxn];
int q[maxn];
vector<int> g[maxn];
int n;
void dfs(int i,int f)
{   vis[i]=1;
    q[i]=f*g[i].size();
    for(int j=0;j<g[i].size();j++)
    {
        if(!vis[g[i][j]])
        {
            dfs(g[i][j],-f);
        }
    }
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {   memset(vis,0,sizeof(vis));

        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            g[i].clear();
        }
        for(int i=1;i<n;i++)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            g[u].push_back(v);
            g[v].push_back(u);
        }
        dfs(1,1);
        for(int i=1;i<=n;i++)
            printf("%d ",q[i]);
        printf("\n");
    }
}



举报

相关推荐

0 条评论