• 机器扫边


    机器扫边

    给一棵n个节点的树, 节点编号为1~n, 每条边都有一个花费值。
    有k个机器人从s点出发, 问让机器人遍历所有边,最少花费值多少?

    输入

    第一行输入三个整数n(1 le n le 10^4), s(1 le s le n), k(1 le k le 10)n(1n104),s(1sn),k(1k10)。

    接下来n-1行,每行三个整数x_i, y_i (1 le x_i, y_i le n, x_i e y_i), w_i(1 le w_i le 10^4)xi,yi(1xi,yin,xi=yi),wi(1wi104), 表示x_i, y_ixi,yi之间有一条边,花费值为w_iwi

    输入保证是一棵树。

    输出

    输出最小花费值。

    样例

    输入

    3 1 1
    1 2 1
    1 3 1

    输出

    3

    输入

    3 1 2
    1 2 1
    1 3 1

    输出

    2
    /*************************************************************************
        > Author: Henry Chen
        > Mail: 390989083@qq.com 
     ************************************************************************/
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 10009;
    struct edge
    {
        int v,w;
    }e[2*N];
    int head[N],nxt[2*N];
    int tot = 0;
    int n,m,s;
    long long dp[N][15];
    void add_edge(int u,int v,int w)
    {
        e[++tot] = (edge){v,w};
        nxt[tot] = head[u];
        head[u] = tot;
    }
    void dfs(int u,int fa)
    {
    
        for(int i = head[u];i != -1;i = nxt[i])
        {
            int v = e[i].v;
            long long w = 1ll*e[i].w;
            if(v != fa)
            {
                dfs(v,u);
                for(int j = m;j >= 1;j--)
                {
                    dp[u][j] += dp[v][0] + 2 * w;
                    for(int k = 1;k <= j;k++)
                    {
                        dp[u][j] = min(dp[u][j],dp[u][j-k]+dp[v][k]+w * k);
                    }
                }
                dp[u][0] += dp[v][0] + 2 * w;
            }
        }
    }
    int main()
    {
        cin >> n >> s >> m;
        memset(head,-1,sizeof(head));
        memset(dp,0,sizeof(dp));
        tot = 0;
        for(int i = 1;i < n;i++)
        {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            add_edge(u,v,w);
            add_edge(v,u,w);
        }
        dfs(s,-1);
        printf("%lld
    ",dp[s][m]);
        return 0;
    }
  • 相关阅读:
    MonoDev 冷门而好用的功能
    Android Runtime
    bat调用bat的一个巨坑
    AssetBundles
    赢家不会告诉你的事
    防止过度工程
    如果你不肯向这个世界投降
    《我的互联网方法论》
    Notepad++ HTML格式化
    Python 包的相对导入讲解
  • 原文地址:https://www.cnblogs.com/mzyy1001/p/13592136.html
Copyright © 2020-2023  润新知