zoukankan      html  css  js  c++  java
  • hdu2196 Computer待续

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #define ll long long
    using namespace std;
    inline int read()
    {
        int x=0,f=1;
        char ch=getchar();
        while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
        while(isdigit(ch)){x=10*x+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,first[10010],to[10010],next[10010],val[10010],cnt;
    inline void add(int u,int v,int w)
    {
        to[++cnt]=v;
        next[cnt]=first[u];
        first[u]=cnt;
        val[cnt]=w;
    }
    int dp[10010][2],depth1[10010],depth2[10010];
    int dfs1(int x,int fa)
    {
        for(int i=first[x];i;i=next[i])
        {
            int v=to[i];
            if(v==fa)continue;
            dp[x][0]=max(dfs(v)+val[i],dp[x][0]);
        }
        return dp[x][0];
    }
    int vis[10010];
    int dfs2(int x,int fav)
    {
        int max1=0,max2=0;
        int flag1,flag2;
        if(vis[x])continue;
        for(int i=first[x];i;i=next[i])
        {
            int v=to[i];
            if(vis[v])continue;
            int tmp=dp[v][0]+val[i];
            if(tmp>max1)
            {
                max2=max1;
                max1=tmp;
                flag2=flag1;
                flag1=v;
            }
            if(tmp==max1 || tmp>max2)
            {
                max2=max1;
                max1=tmp;
                flag2=v;
            }
        }
        if(x!=1)
        {
            int tmp=dp[x][1];
            int v=-2;
            if(tmp>max1)
            {
                max2=max1;
                max1=tmp;
                flag2=flag1;
                flag1=v;
            }
            if(tmp==max1 || tmp>max2)
            {
                max2=max1;
                max1=tmp;
                flag2=v;
            }
        }
        for(int i=first[x];i;i=next[i])
        {
            int v=to[i];
            if(v==flag1)
                dp[x][1]=max2+val[i];
            else dp[x][1]=max1+val[i];
            dfs2(v,val[i]);
        }
    }
    int main()
    {
        n=read();
        for(int i=1;i<n;i++)
        {
            int u,v,w;
            u=read();v=read();w=read();
            add(u,v,w);add(v,u,w);
        }
        dfs1(1,-1);
    }
  • 相关阅读:
    禁止后台运行
    图标的圆角和光晕效果和启动画面
    IOS 开发 有关iPhone程序的安装目录UUID 唯一标识
    NSOperation与performSelectorOnMainThread
    Java web开发学习规划
    JAVA类集
    java 四种xml操作方式的基本使用方法
    用JDOM操作XML文件
    java web 学习
    过去的,将来的
  • 原文地址:https://www.cnblogs.com/Kong-Ruo/p/7810038.html
Copyright © 2011-2022 走看看