Rinne Loves Edges

Rinne Loves Edges

https://ac.nowcoder.com/acm/problem/22598

题意

有一颗树,可以删去一些边,代价是边权。

现在要使得叶子节点和根节点不连通,求删边的最小代价。

分析

M=N−1,这也太坑了吧。

举个栗子
图片说明

我们可以选择删去这条边,或者删去这条边,显然选代价小的。

我们可以通过求出所需的代价。

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define pii pair<int,int>
#define int long long
const int inf = 0x3f3f3f3f;
const int maxn = 101110;
const int M = 1e9+7;
int n,m,s,ans;

vector<pii> v[maxn];

int dfs(int u,int pre,int res)        //res表示u和pre边的代价
{   
    int tmp = 0;                //tmp表示删除全部子树的最小代价
    for(auto i : v[u])
    {
        if(i.first == pre) continue;
        tmp += dfs(i.first,u,i.second);
    }
    if(tmp == 0) tmp = res;
    //if(u == 1) cout<<tmp<<' '<<res<<endl;
    return min(tmp,res);
}


signed main()
{   
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>m>>s;
    for(int i = 1,x,y,z; i <= m; i++) 
    {
        cin>>x>>y>>z;
        v[x].push_back({y,z});
        v[y].push_back({x,z});
    }
    cout<<dfs(s,0,1e18)<<endl;
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 18:22
投了几百份简历,专业和方向完全对口,都已读不回。尝试改了一下学校,果然有奇效。
steelhead:这不是很正常嘛,BOSS好的是即便是你学院本可能都会和聊几句,牛客上学院本机会很少了
点赞 评论 收藏
分享
Gaynes:查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务