zoukankan      html  css  js  c++  java
  • 洛谷3931 [洛谷八连测] 一道难题

    题目链接

    题目:

    一棵有根树,每条边上具有割掉该边的代价,求割开这个树的最小代价(所谓割开一棵有根树,就是删除若干条边,使得任何任何叶子节点和根节点不连通) 

    DFS入门题,自下而上累计答案求min

    //Luogu3931
    #include<bits/stdc++.h>
    #define MAXN 100007
    #define INF 0x7f7f7f7f
    using namespace std;
    int read(){
        int x=0,t=1;char c=getchar();
        while(c<'0'||c>'9'){if(c=='-')t=-1;c=getchar();}
        while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
        return x*t;
    }
    int N,root,cnt,last[MAXN],f[MAXN],p[MAXN];
    struct Edge{
        int other,pre,val;
    }a[MAXN*2];
    void connect(int x,int y,int z){
        a[++cnt]=(Edge){y,last[x],z};
        last[x]=cnt;
    }
    void DFS(int x)
    {
        for(int i=last[x];i;i=a[i].pre){
            int to=a[i].other;
            if(p[x]!=to){
                p[to]=x;
                DFS(to);
                f[x]+=min(f[to],a[i].val);  //割边 还是 继承 取 min
            }
        } 
        if(!f[x])f[x]=INF;            //叶子设正无穷
    }
    int main()
    {
        N=read(),root=read();
        for(int i=1;i<=N-1;i++){
            int x=read(),y=read(),z=read();
            connect(x,y,z);connect(y,x,z);
        }
        DFS(root);
        printf("%d
    ",f[root]);
        return 0;
    } 
  • 相关阅读:
    nodepad++的python环境变量设置
    notepad++怎么显示项目的目录树?
    转:Mysql explain
    转:Java NIO(3)
    转:Java NIO(2)
    转:Java NIO
    java 符号引用与直接引用
    Redis 基础命令
    适配器模式 & 装饰器模式
    classpath: spring 中的查找方式
  • 原文地址:https://www.cnblogs.com/Elfish/p/7642130.html
Copyright © 2011-2022 走看看