zoukankan      html  css  js  c++  java
  • BZOJ_2435_[Noi2011]道路修建_dfs

    BZOJ_2435_[Noi2011]道路修建_dfs

    题意:

    http://www.lydsy.com/JudgeOnline/problem.php?id=2435

    分析:

    dfs搞定。

    我怕爆栈写了非递归dfs。

    其实bfs两遍也可以做。

    代码:

    #include <stdio.h>
    int head[1000001],to[2000010],nxt[2000010],cnt,n,val[2000010];
    int fa[1000001],siz[1000001];
    __attribute__((optimize("-O2")))inline char nc(){
        static char buf[100000],*p1=buf,*p2=buf;
        return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
    }
    __attribute__((optimize("-O2")))inline int read(){
        char ch=nc();int sum=0;
        while(!(ch>='0'&&ch<='9'))ch=nc();
        while(ch>='0'&&ch<='9')sum=(sum<<3)+(sum<<1)+ch-48,ch=nc();
        return sum;
    }
    __attribute__((optimize("-O2")))int main(){
        n=read();
        register int i,x,y,z;
        for(i=1;i<n;i++){
            x=read(),y=read(),val[i]=read();siz[i]=1;
            to[++cnt]=y;nxt[cnt]=head[x];head[x]=cnt;
            to[++cnt]=x;nxt[cnt]=head[y];head[y]=cnt;
        }
        siz[n]=1;x=1;
        while(x)
        {
            int f=0;
            for(i=head[x];i;i=nxt[i])
            {
                if(to[i]==fa[x])continue;
                f=1;
                fa[to[i]]=x;
                head[x]=nxt[i];
                x=to[i];
                break;
            }
            if(f==0)siz[fa[x]]+=siz[x],x=fa[x];
        }
        long long ans=0;
        for(i=1;i<2*n-2;i+=2){
            x=to[i],y=to[i+1],z=val[i+1>>1];
            if(fa[y]==x){int t=x;x=y;y=t;}
            ans+=1ll*z*(n-siz[x]-siz[x]<0?siz[x]+siz[x]-n:n-siz[x]-siz[x]);
        }
        printf("%lld
    ",ans);
    }
    
  • 相关阅读:
    Mac Mysql 修改初始化密码
    网址收藏
    Xcode 模拟器复制解决方案
    ios优秀的第三方框架
    CocoaPods第三方库管理工具
    ios网络请求
    java面试宝典
    SQL分表
    FastDFS+Nginx+Module
    分布式文件系统FastDFS架构认知
  • 原文地址:https://www.cnblogs.com/suika/p/8470028.html
Copyright © 2011-2022 走看看