题目大意

给定一棵大小为nn的树,和一个限制mm。
现在要给每个结点赋值为一个整数,范围为[1,m][1,m],且要求树上相邻两点间权值之差大于等于给定的kk。
求所有合法方案数。
T组数据。

Data Constraint
T≤10,n,k≤100,m≤109T \leq 10 , n,k \leq 100 ,m \leq 10^9

题解

设状态f[i][j]f[i][j]表示第ii个结点,取值为jj时的方案数。
那么

f[i][j]=Π(∑|k−j|≥kf[son][k])

f[i][j] = \Pi(\sum_{|k-j|\geq k} f[son][k])
然后可以发现对于每个 f[i]f[i],它前面 (n−1)∗k(n-1)*k个元素与最后 (n−1)∗k(n-1)*k个元素对称,中间是连续一段相同的数。所以只要求出前 (n−1)∗k(n-1)*k个元素的之就可以了。

SRC

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std ;#define N 100 + 10
#define M 100000 + 10
typedef long long ll ;
const int MO = 1e9 + 7 ;int Node[2*N] , Next[2*N] , Head[N] , tot ;
ll f[N][M] , g[N] , S[N][M] ;
int T , n , m , K ;
int Size = 10000 ;void link( int u , int v ) {Node[++tot] = v ;Next[tot] = Head[u] ;Head[u] = tot ;
}inline ll GetSum1( int x , int l ) {if ( l < 1 || l > m ) return 0 ;int B = Size ;if ( l <= min( m , B ) ) return S[x][l] ;else {if ( l <= m - B ) return (S[x][B] + (ll)(l - B) * g[x] % MO) % MO ;else return ((S[x][B] + (ll)(m - 2 * B) * g[x] % MO) % MO + (S[x][B] - S[x][m-l] + MO) % MO) % MO ;}
}inline ll GetSum2( int x , int r ) {if ( r < 1 || r > m ) return 0 ;int B = Size ;if ( m <= B ) return (S[x][m] - S[x][r-1] + MO) % MO ;if ( r > m - B ) return S[x][m-r+1] ;if ( r > B ) return (S[x][B] + (ll)(m - B - r + 1) * g[x] % MO) % MO ;else return ((S[x][B] + (ll)(m - 2 * B) * g[x] % MO) + (S[x][B] - S[x][r-1] + MO) % MO) % MO ;
}void DFS( int x , int Fa ) {g[x] = 1 ;for (int y = 1 ; y <= Size ; y ++ ) f[x][y] = 1 ;for (int p = Head[x] ; p ; p = Next[p] ) {if ( Node[p] == Fa ) continue ;if ( Node[p] == 36 ) {Node[p] ++ ;Node[p] -- ;}DFS( Node[p] , x ) ;for (int y = 1 ; y <= min( m , Size + 1 ) ; y ++ ) {ll ret = (GetSum1( Node[p] , y - K ) + GetSum2( Node[p] , y + K )) % MO ;if ( ret < 0 ) {ret ++ ;ret -- ;}if ( y == Size + 1 ) g[x] = ((ll)g[x] * ret) % MO ;else f[x][y] = ((ll)f[x][y] * ret) % MO ;}}for (int y = 1 ; y <= Size ; y ++ ) S[x][y] = (S[x][y-1] + f[x][y]) % MO ;
}int Power( int x , int k ) {int s = 1 ;while ( k ) {if ( k & 1 ) s = (ll)s * x % MO ;x = (ll)x * x % MO ;k /= 2 ;}return s ;
}int main() {freopen( "label.in" , "r" , stdin ) ;freopen( "label.out" , "w" , stdout ) ;scanf( "%d" , &T ) ;while ( T -- ) {tot = 0 ;Size = 10000 ;memset( f , 0 , sizeof(f) ) ;memset( g , 0 , sizeof(g) ) ;memset( S , 0 , sizeof(S) ) ;memset( Head , 0 , sizeof(Head) ) ;scanf( "%d%d%d" , &n , &m , &K ) ;for (int i = 1 ; i < n ; i ++ ) {int x , y ;scanf( "%d%d" , &x , &y ) ;link( x , y ) ;link( y , x ) ;}if ( !K ) { printf( "%d\n" , Power( m , n ) ) ; continue ; }if ( (n - 1) * K > Size ) Size = (n - 1) * K ;DFS( 1 , 0 ) ;printf( "%lld\n" , GetSum1( 1 , m ) ) ;}return 0 ;
}

以上.

JZOJ4816. label相关推荐

  1. python中label组件参数_Python tkinter(六) 标签(Label)组件的属性说明及示例

    使用语法 widget = Radiobutton( master, parameter=value, ... ) master:文本框控件的父容器 parameter:文本框的参数 value:参数 ...

  2. HTML label的隐藏,html – 带有可见的隐藏元素:after – CSS

    我猜这是因为大卫托马斯认为伪元素是不可见的,因为它是'父元素'.它在其他浏览器中工作的原因可以通过不同的实现来解释,其中伪元素可能不被认为是元素的子元素? 另一种方法 无论如何,我有一些像这样的复选框 ...

  3. python label textvariable_在子窗口中为标签的textvariable赋值失败时,有关,给,Label,问题...

    写了个母子窗体程序,当主窗口打开子窗口后,通过set textvariable 的发发对Label标题赋值失败,如果将子窗体程序单独运行,则正常.请教各位大神如果处理,多谢! from tkinter ...

  4. linux 挂载分区inode,Linux中分区挂载和LABEL的指定

    让Linux开机就挂载分区,我知道有两种方法,一种是fstab,另一种是rc.local,我比较倾向前一种. 这两种方法各要注意: fstab是在开机时就挂载,所以你要注意是否你的分区位于某个需要特别 ...

  5. matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等

    matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...

  6. java中运用label跳转

    2019独角兽企业重金招聘Python工程师标准>>> goto是java的保留词,但java里并没有goto. goto可以随心所欲地在代码里跳转,看似很方便,但带来的代码混乱成为 ...

  7. 【百度地图API】——如何用label制作简易的房产标签

    摘要: 最近,API爱好者们纷纷说,自定义marker太复杂了!不仅定义复杂,连所有的dom事件都要自己重新定义.有没有快速简易创建房产标签的方法呢? 答案当然是有的啦~ 我们可以利用label嘛! ...

  8. Label控件属性AssociatedControlID

    可以使用Label控件来标注一个HTML表单字段.Label控件拥有属性AssociatedControlID,可以设置此属性来指向表示表单字段的ASP.NET控件. 例如,代码清单2-3中的页面含有 ...

  9. 简单的TableViewCell高度自适应(只有Label,仅当参考思路)

    在iOS开发中或多或少的都会碰到TableViewCell高度自适应,那么今天这篇文章就简单的介绍一下如何给tableViewCell自适应高度 #ViewController copy @inter ...

  10. 用 Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)

    上一节我们讨论了 Service 部署的两种模式:global mode 和 replicated mode.无论采用 global mode 还是 replicated mode,副本运行在哪些节点 ...

最新文章

  1. Linux下的阻塞(Block)
  2. java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输
  3. linux tcp重传多会导致软中断在各个核很不均匀么?
  4. 深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数
  5. Android 秒级编译FreeLine
  6. netdev FAQ
  7. SpringCloud 中使用 Ribbon(默认轮询规则 + 自定义规则)
  8. rest syntax(parameters)
  9. Qt入门(六)——抽奖系统的实现
  10. iOS开发之YYKit丰富的组件,如:YYText
  11. 如何获得SQL Server 2012 MCSA认证
  12. 国内比较常见的工厂管理系统有哪些?
  13. 《评人工智能如何走向新阶段》后记(再续11)
  14. Jetson TK1 血泪开发记(一)——Jetson TK1初体验
  15. 极客Linux日记-2022年1月2日
  16. CSR867x — 如何修改BLE的蓝牙地址
  17. c语言进程管理,OS进程管理模拟(C语言实现)
  18. Java接入微信支付ApiV3详细教程
  19. 攻防世界MISC进阶之misc1
  20. 使用Template控制Editor显示方式

热门文章

  1. [论文阅读笔记]DeepFool: a simple and accurate method to fool deep neural networks
  2. 如果你还是“程序员”,我劝你别创业!
  3. 虚拟机下的SYN Flood测试
  4. 服务(Service)
  5. iOS 开发 code sign 代码签名深入剖析
  6. SEEDLAB2.0-Meltdown
  7. 【理解】运用数据透视表制作三栏账
  8. Layui 后台管理模板 【Y-Admin】
  9. 怎样压缩图片?有这3种图片压缩的方法就够了
  10. 两年后,中国CF又站在了世界之巅