码迷,mamicode.com
首页 > 其他好文 > 详细

小H和游戏

时间:2020-05-02 17:10:22      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:for   ios   namespace   ons   syn   algorithm   想法   class   ==   

题目链接:https://ac.nowcoder.com/acm/contest/5203/D

 

想法:

最简单暴力的想法就是对于每一个点我们就让他以及和他距离为2的点权++

但是如果一个点有多个孩子就会 TLE

我们还一个考虑,一个点的点权受到 它自己 它的孩子 它的父亲 它的父亲的父亲影响,那么我们会发现其实我们只需要标记该点自己和它的父亲和它的父亲的父亲就可以了

#pragma GCC optimize(3,"Ofast","inline")//O3优化
#pragma GCC optimize(2)//O2优化
#include <algorithm>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <stack>
#include <set>
#include <queue>
#include <cmath>
#include <cstdio>
#include <iomanip>
#include <ctime>
#include <bitset>
#include <cmath>
#include <sstream>
#include <iostream>

#define LL long long
#define ls nod<<1
#define rs (nod<<1)+1
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define INF 0x3f3f3f3f
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)

const double eps = 1e-10;
const int maxn = 8e5 + 10;
const int mod = 10;

int sgn(double a){return a < -eps ? -1 : a < eps ? 0 : 1;}
using namespace std;

vector<int> G[maxn];
int fa[maxn];
int f[maxn][3];

void dfs(int x) {
    for (int i = 0;i < G[x].size();i++) {
        int v = G[x][i];
        if (v == x || v == fa[x])
            continue;
        fa[v] = x;
        dfs(v);
    }
}

LL cal(int x) {
    LL sum = f[x][0] + f[x][1] + f[x][2];  // 孩子的影响
    if (fa[x]) { 
        sum = sum + f[fa[x]][2]; // 父亲自身的影响 
        sum = sum + f[fa[x]][1] - f[x][2]; // 兄弟的影响
    }
    if (fa[fa[x]]) {  // 父亲的父亲的影响
        sum = sum + f[fa[fa[x]]][2];
    }
    return sum;
}

int main() {
    ios::sync_with_stdio(false);
    int n,q;
    cin >> n >> q;
    for (int i = 1;i < n;i++) {
        int u,v;
        cin >> u >> v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    dfs(1);
    while (q--) {
        int x;
        cin >> x;
        f[x][2]++;
        if (fa[x]) {
            f[fa[x]][1]++;
        }
        if (fa[fa[x]])
            f[fa[fa[x]]][0]++;
        cout << cal(x) << endl;
    }
    return 0;
}

 

小H和游戏

标签:for   ios   namespace   ons   syn   algorithm   想法   class   ==   

原文地址:https://www.cnblogs.com/-Ackerman/p/12818435.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!