首页 > 其他 > 详细

小H和游戏

时间:2020-04-14 23:19:24      阅读:63      评论:0      收藏:0      [点我收藏+]

题意:

技术分享图片
传送门

分析:

无根树变有根树。
设置数组:\(num[v][i]\),其中 \(0\leq i \leq 2\)
表示:点 \(v\) 对距离点 \(v\) 距离为 \(i\) 的孩子节点产生的受损数。

代码:

#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=750050;
int fa[N],num[N][3];
vector<int>G[N];
void dfs(int v,int p)
{
    fa[v]=p;
    for(int i=0;i<G[v].size();i++)
    {
        int u=G[v][i];
        if(u==p)
            continue;
        dfs(u,v);
    }
}
int main()
{
    int n,q,u,v;
    scanf("%d%d",&n,&q);
    for(int i=1;i<n;i++)
    {
        scanf("%d%d",&u,&v);
        G[u].pb(v);
        G[v].pb(u);
    }
    dfs(1,0);
    while(q--)
    {
        scanf("%d",&v);
        //受影响的点:
        num[v][1]++;//点v的孩子
        num[v][2]++;//点v的孙子
        num[fa[v]][1]++;//点v的兄弟
        num[fa[v]][0]++;//点v的父亲
        num[fa[fa[v]]][0]++;//点v的父亲的父亲
        printf("%d\n",num[v][0]+num[fa[v]][1]+num[fa[fa[v]]][2]);//哪些点可以对该点产生影响
    }
    return 0;
}

小H和游戏

原文:https://www.cnblogs.com/1024-xzx/p/12701963.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!