• [bzoj3872][Poi2014]Ant colony_树形dp


    Ant colony bzoj-3872 Poi-2014

    题目大意:说不明白.....题目链接

    注释:略。


    想法:两个思路都行。

    反正我们就是要求出每个叶子节点到根节点的每个路径权值积。

    可以将边做为代理根。或者将边断掉。

    最后,附上丑陋的代码... ...

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    const int maxn=1000010;
    const ll inf=1<<30;
    int n,m,cnt,r1,r2;
    ll K,ans;
    int to[maxn<<1],next[maxn<<1],head[maxn],d[maxn],fa[maxn];
    ll l[maxn],r[maxn],v[maxn];
    inline void add(int a,int b)
    {
        to[cnt]=b,next[cnt]=head[a],head[a]=cnt++;
    }
    inline int rd()
    {
        int ret=0,f=1;  char gc=getchar();
        while(gc<'0'||gc>'9') {if(gc=='-')    f=-f;   gc=getchar();}
        while(gc>='0'&&gc<='9')   ret=ret*10+gc-'0',gc=getchar();
        return ret*f;
    }
    void dfs(int x)
    {
        for(int i=head[x];i!=-1;i=next[i])  if(to[i]!=fa[x])
        {
            fa[to[i]]=x;
            if(d[to[i]]==1) l[to[i]]=l[x],r[to[i]]=r[x];
            else    l[to[i]]=min(inf,l[x]*(d[to[i]]-1)),r[to[i]]=min(inf,(r[x]+1)*(d[to[i]]-1)-1);
            dfs(to[i]);
        }
    }
    int main()
    {
        n=rd(),m=rd(),K=rd();
        int i,a,b;
        for(i=1;i<=m;i++)    v[i]=rd();
        v[m+1]=inf+1;
        sort(v+1,v+m+1);
        r1=rd(),r2=rd(),d[r1]++,d[r2]++;
        memset(head,-1,sizeof(head));
        for(i=1;i<n-1;i++)   a=rd(),b=rd(),add(a,b),add(b,a),d[a]++,d[b]++;
        if(d[r1]==1)    l[r1]=r[r1]=K;
        else    l[r1]=K*(d[r1]-1),r[r1]=(K+1)*(d[r1]-1)-1;
        if(d[r2]==1)    l[r2]=r[r2]=K;
        else    l[r2]=K*(d[r2]-1),r[r2]=(K+1)*(d[r2]-1)-1;
        dfs(r1),dfs(r2);
        for(i=1;i<=n;i++)    if(d[i]==1)
            a=lower_bound(v+1,v+m+1,l[i])-v,b=upper_bound(v+1,v+m+1,r[i])-v,ans+=(b-a)*K;
        printf("%lld",ans);
        return 0;
    }
    

    小结:有意思.../xyx

  • 相关阅读:
    Java基础语法
    C语言练习题目
    C语言进阶(1)
    C语言易错点
    SQL语句入门
    C语言算法基础
    C语言算法入门
    嵌入式入门
    C语言基础(3)
    C语言基础(2)
  • 原文地址:https://www.cnblogs.com/ShuraK/p/9383711.html
Copyright © 2020-2023  润新知