20191212 C 简单点分治

给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权。定义一条路径的价值为路径上的点权和-路径上的点权最大值。 给定参数 P P P,我们想知道,有多少不同的树上简单路径,满足它的价值恰好是 P P P的倍数。 注意:单点算作一条路径; u ! = v u!=v u!=v时, ( u , v ) (u,v) (u,v) ( v , u ) (v,u) (v,u)只算一次。

n < = 1 e 5 , P < = 1 e 7 n<=1e5 , P<=1e7 n<=1e5,P<=1e7

这个,智商压制题。
其实只需要点分治之后按路径最大值排序,再来个简单的子树内去重即可。

A C   C o d e \rm AC\ Code AC Code

#include<bits/stdc++.h>
#define maxn 100005
#define LL long long
using namespace std;

int n,P,a[maxn
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值