zoukankan      html  css  js  c++  java
  • 516D Drazil and Morning Exercise

    分析

    求出直径和最远距离d

    之后我们以直径中点为根

    发现父亲的d肯定不小于儿子的d

    于是从下往上启发式合并维护与子树根的值相差L内的个数即可

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define int long long
    priority_queue<int>q[100100];
    int n,m,Q,L,d[100100],rt,ans;
    vector<pair<int,int> >v[100100];
    inline void dfs(int x,int fa){
        for(int i=0;i<v[x].size();i++)if(v[x][i].fi!=fa){
          int y=v[x][i].fi,z=v[x][i].se;d[y]=d[x]+z;dfs(y,x);
        }
    }
    inline void dfs2(int x,int fa,int sum){
        d[x]=max(d[x],sum);
        for(int i=0;i<v[x].size();i++)if(v[x][i].fi!=fa){
          int y=v[x][i].fi,z=v[x][i].se;dfs2(y,x,sum+z);
        }
    }
    inline void mer(priority_queue<int> &x,priority_queue<int> &y){
        if((int)y.size()>(int)x.size())swap(x,y);while(!y.empty())x.push(y.top()),y.pop();
    }
    inline void go(int x,int fa){
        for(int i=0;i<v[x].size();i++)if(v[x][i].fi!=fa){
          int y=v[x][i].fi,z=v[x][i].se;go(y,x);mer(q[x],q[y]);
          while(!q[x].empty())if(q[x].top()-d[x]>L)q[x].pop();else break;
        }
        ans=max(ans,(int)q[x].size());return;
    }
    signed main(){
        int i,j,k;rt=1;
        scanf("%lld",&n);
        for(i=1;i<n;i++){
          int x,y,z;
          scanf("%lld%lld%lld",&x,&y,&z);
          v[x].pb(mp(y,z));
          v[y].pb(mp(x,z));
        }
        dfs(rt,0);for(i=1;i<=n;i++)if(d[i]>d[rt])rt=i;
        memset(d,0,sizeof(d));dfs(rt,0);int ano=rt;
        for(i=1;i<=n;i++)if(d[i]>d[ano])ano=i;dfs2(ano,0,0);
        for(i=1;i<=n;i++)if(d[i]<d[rt])rt=i;
        scanf("%lld",&Q);
        while(Q--){
          for(i=1;i<=n;i++){while(!q[i].empty())q[i].pop();q[i].push(d[i]);}
          scanf("%lld",&L);ans=0;go(rt,0);printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    amq笔记:记一个关于PooledConnectionFactory的问题
    ganglia笔记:rrd数据库
    ganglia笔记:rrds目录
    golang笔记:unsupported driver -> Scan pair: <nil> -> *string
    golang笔记:cookie
    golang笔记:net/smtp
    spring笔记
    Qt坑点汇总
    QT自定义控件系列(二) --- Loading加载动画控件
    Qt自定义控件系列(一) --- 圆形进度条
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/11820423.html
Copyright © 2011-2022 走看看