zoukankan      html  css  js  c++  java
  • 51nod 1405【DFS】


    思路:


    对于结点 u 的子节点 v, 如果已经一直到结点 u 的答案ans[u],那么转移到对于结点 v,num[v] 为 v为根的树的结点个数,那么对于结点v的答案相对于结点u的答案来说,

    ans[v]=-num[v]*edge[u,v]+(n-num[v])*edge[u,v];


    //#include<bits/stdc++.h>
    #include<cstdio>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    typedef pair<int,int> PII;
    typedef long long LL;
    #pragma comment(linker, "/STACK:10240000,10240000")
    
    const int N=1e5+10;
    
    struct asd{
        LL w;
        int to;
        int next;
    }e[N*2];
    int head[N],tol;
    LL n,ans[N];
    LL num[N];
    
    void init()
    {
            tol=0;
            memset(head,-1,sizeof(head));
            memset(num,0,sizeof(num));
            memset(ans,0,sizeof(num));
    }
    void add(int u,int v)
    {
        e[tol].w=1;
        e[tol].to=v;
        e[tol].next=head[u];
        head[u]=tol++;
    }
    
    bool vis[N];
    LL res;
    LL DFS(int u,LL weight)
    {
        num[u]=1LL;
        for(int i=head[u];~i;i=e[i].next)
        {
            int v=e[i].to;
            if(vis[v]) continue;
            res=res+weight+e[i].w;
            vis[v]=true;
            num[u]=num[u]+DFS(v,weight+e[i].w);
        }
        return num[u];
    }
    
    void DFSS(int u)
    {
        for(int i=head[u];~i;i=e[i].next)
        {
            int v=e[i].to;
            if(vis[v]) continue;
            vis[v]=true;
            ans[v]=(n-num[v]*2LL)*e[i].w+ans[u];
            DFSS(v);
        }
    }
    
    int main()
    {
        int u,v;
        scanf("%lld",&n);
        init();
        for(int i=1;i<n;i++){
            scanf("%d%d",&u,&v);
            add(u,v);add(v,u);
        }
    
        memset(vis,false,sizeof(vis));
        vis[1]=true;
        res=0;
        num[1]=DFS(1,0);
        ans[1]=res;
    
        memset(vis,false,sizeof(vis));
        vis[1]=true;
        DFSS(1);
    
        for(int i=1;i<=n;i++)
            printf("%lld
    ",ans[i]);
        return 0;
    }
    


  • 相关阅读:
    优化--工具
    架构
    Gradle
    战争迷雾
    进度管理
    工具
    架构
    牛人
    apk 破解
    效率
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777345.html
Copyright © 2011-2022 走看看