C. Garland 找规律找规律找规律

首先如果不为3的倍数肯定无解

如果为3的倍数

dfs查找每个点作为根的子树和

遇到一个满足和为sum/3的就删去

正确性:

可能会有很多个这样的点,他们之间的切割方式可以排列组合,要不要记录谁先割啥的,dp?

不,因为每个点其实都是一样的,对于两个合法的点之间..它们和为0,这段就没贡献,不影响。

:

复制代码
#include<bits/stdc++.h>
using namespace std;
int cnt=0,n,sum[2000000],a[2000000],ave;
vector <int> g[2000000],ans;
void dfs(int x)
{
    sum[x]=a[x];
    for(auto v:g[x])
    {
        dfs(v);
        sum[x]+=sum[v];
    }
    if(sum[x]==ave) ans.push_back(x),sum[x]=0;
}
int main()
{
       cin>>n;
       
       int root,tot=0;
       
       for(int i=1;i<=n;i++)
       {
              int fa,w;
              scanf("%d%d",&fa,&w);
              tot+=w;
              a[i]=w;
           g[fa].push_back(i);
              if(fa==0) root=i;
    }
    
    if(tot%3!=0)
    {
        cout<<"-1";return 0;
    }
    
    ave=tot/3;
    dfs(root);
    
    if(ans.size()<3)
    {
        cout<<"-1";return 0;
    }
    
    cout<<ans[0]<<" "<<ans[1];
}
复制代码

 

posted @   liyishui  阅读(48)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示