Rinne Love Edges 题解

Rinne Loves Edges

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

刚刚做了二叉苹果树过来的,然后把这题秒了。感觉比二叉苹果树简单很多。
二叉苹果树题解:https://blog.nowcoder.net/n/c8a9812aa008472b8b31391e7995e29c

跟二叉苹果树同样的思路,把边权下放到点权,这里不再赘述,跑一遍树的构造,再进行dfs记忆化dp。
边界是叶子结点,dp[叶子]=val[叶子]
其他结点,要么把儿子割掉,要么让儿子这颗子树已经割掉了叶子。
dp[root]=图片说明 min(val[son],dp[son])

本题注意事项:
1.N为1e5,所以不能用邻接矩阵,最好用链式前向星同时存边的起点终点和边权
2.题目说了long long范围内,按理说不开long long要见祖宗,不过我int也AC了
3.用重要点s作为根跑下树的构造,因为你最后要用dp[s]作为答案的

以下是代码:

//下放边权变为点权,对于每一个子树,要么加上儿子的点权,要么加上儿子为结点的整个子树的dp值

#include <bits/stdc++.h>
using namespace std;
int n,m,s;
const int N=100100;
struct Edge
{
    int v,w,next;
}e[N<<1];
int cnt=0;
int head[N];
int val[N];
int dp[N];
bool haveson[N];
void add(int u,int v,int w)
{
    e[++cnt].v=v;
    e[cnt].w=w;
    e[cnt].next=head[u];
    head[u]=cnt;
}
void pushdown(int root,int pre)
{
    for(int i=head[root];i;i=e[i].next)
    {
        int to=e[i].v;
        if(to==pre) continue;
        haveson[root]=true;
        pushdown(to,root);
        val[to]=e[i].w;
    }
}
void dfs(int root,int pre)
{
    if(!haveson[root]) dp[root]=val[root];
    for(int i=head[root];i;i=e[i].next)
    {
        int to=e[i].v;
        if(to==pre) continue;
        dfs(to,root);
        dp[root]+=min(dp[to],val[to]);
    }
}
int main()
{
    scanf("%d%d%d",&n,&m,&s);
    while(m--)
    {
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        add(u,v,w);
        add(v,u,w);
    }
    pushdown(s,0);
    dfs(s,0);
    printf("%d\n",dp[s]);
}
全部评论

相关推荐

05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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