JZOJ4816. label
题目大意
给定一棵大小为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] = \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相关推荐
- python中label组件参数_Python tkinter(六) 标签(Label)组件的属性说明及示例
使用语法 widget = Radiobutton( master, parameter=value, ... ) master:文本框控件的父容器 parameter:文本框的参数 value:参数 ...
- HTML label的隐藏,html – 带有可见的隐藏元素:after – CSS
我猜这是因为大卫托马斯认为伪元素是不可见的,因为它是'父元素'.它在其他浏览器中工作的原因可以通过不同的实现来解释,其中伪元素可能不被认为是元素的子元素? 另一种方法 无论如何,我有一些像这样的复选框 ...
- python label textvariable_在子窗口中为标签的textvariable赋值失败时,有关,给,Label,问题...
写了个母子窗体程序,当主窗口打开子窗口后,通过set textvariable 的发发对Label标题赋值失败,如果将子窗体程序单独运行,则正常.请教各位大神如果处理,多谢! from tkinter ...
- linux 挂载分区inode,Linux中分区挂载和LABEL的指定
让Linux开机就挂载分区,我知道有两种方法,一种是fstab,另一种是rc.local,我比较倾向前一种. 这两种方法各要注意: fstab是在开机时就挂载,所以你要注意是否你的分区位于某个需要特别 ...
- matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等
matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...
- java中运用label跳转
2019独角兽企业重金招聘Python工程师标准>>> goto是java的保留词,但java里并没有goto. goto可以随心所欲地在代码里跳转,看似很方便,但带来的代码混乱成为 ...
- 【百度地图API】——如何用label制作简易的房产标签
摘要: 最近,API爱好者们纷纷说,自定义marker太复杂了!不仅定义复杂,连所有的dom事件都要自己重新定义.有没有快速简易创建房产标签的方法呢? 答案当然是有的啦~ 我们可以利用label嘛! ...
- Label控件属性AssociatedControlID
可以使用Label控件来标注一个HTML表单字段.Label控件拥有属性AssociatedControlID,可以设置此属性来指向表示表单字段的ASP.NET控件. 例如,代码清单2-3中的页面含有 ...
- 简单的TableViewCell高度自适应(只有Label,仅当参考思路)
在iOS开发中或多或少的都会碰到TableViewCell高度自适应,那么今天这篇文章就简单的介绍一下如何给tableViewCell自适应高度 #ViewController copy @inter ...
- 用 Label 控制 Service 的位置 - 每天5分钟玩转 Docker 容器技术(106)
上一节我们讨论了 Service 部署的两种模式:global mode 和 replicated mode.无论采用 global mode 还是 replicated mode,副本运行在哪些节点 ...
最新文章
- Linux下的阻塞(Block)
- java字符串 直接能网络传输吗_atitit.二进制数据无损转字符串网络传输
- linux tcp重传多会导致软中断在各个核很不均匀么?
- 深入理解SQL Server 2005 中的 COLUMNS_UPDATED函数
- Android 秒级编译FreeLine
- netdev FAQ
- SpringCloud 中使用 Ribbon(默认轮询规则 + 自定义规则)
- rest syntax(parameters)
- Qt入门(六)——抽奖系统的实现
- iOS开发之YYKit丰富的组件,如:YYText
- 如何获得SQL Server 2012 MCSA认证
- 国内比较常见的工厂管理系统有哪些?
- 《评人工智能如何走向新阶段》后记(再续11)
- Jetson TK1 血泪开发记(一)——Jetson TK1初体验
- 极客Linux日记-2022年1月2日
- CSR867x — 如何修改BLE的蓝牙地址
- c语言进程管理,OS进程管理模拟(C语言实现)
- Java接入微信支付ApiV3详细教程
- 攻防世界MISC进阶之misc1
- 使用Template控制Editor显示方式