[jzoj]1794. 保镖排队(树形DP+想法)
来源:互联网 发布:网络成瘾调查问卷 编辑:程序博客网 时间:2024/05/01 14:02
https://jzoj.net/senior/#contest/show/2013/2
Problem
给定n个人的“上司“,求出一个排列,使得每个人的上司在其前面,且一个人的下司一样按照等级顺序排好.
Data constraint
对于20%的数据,有N ≤ 9;
对于40%的数据,有对于所有K,有K ≤ 2;
对于60%的数据,有N ≤ 100;
对于100%的数据,有T ≤ 10,N ≤ 1000,K ≤ N。
Solution
【重要性质】
按照所属关系建立好后,发现这是一棵树.
【基本概念】
假设,当前一个父亲
因为这
而当有一个儿子有儿子时,我们就可以拿
那么怎么算才不会把方案数算重?
【状态设置】
设
【更新状态】
我们可以这么想,如果一个父亲
假设现在算
所以就有了方程:
解释一下,
最后加个1实际上是组合数的运用,这个可以自己推推.
虽然这个组合数很好码,但是要发现并不简单,其实可以用普通的排列组合先试一下,随后再推一推这个式子
那么这道题就可以很完美解决了.
var a,f:array[0..1000,0..1000] of int64; t,tot,toter,next,tov,last,g,nexter:array[0..10000] of int64; tt,w,n,i,j,len,node:longint;procedure insert(x,y:longint);begin inc(len); tov[len]:=y; next[len]:=last[x]; last[x]:=len;end;procedure dfs(k:longint);var x:longint;begin tot[k]:=1; x:=last[k]; while x>0 do begin dfs(tov[x]); tot[k]:=(tot[k]+tot[tov[x]]) mod 10007; x:=next[x]; end;end;procedure dp(k:longint);var x:longint;begin g[k]:=1; x:=last[k]; while x>0 do begin dp(tov[x]); g[k]:=(g[k]*g[tov[x]]) mod 10007; if nexter[tov[x]]>0 then g[k]:=(g[k]*f[ tot[tov[x]] , toter[nexter[tov[x]]]+1 ]) mod 10007; x:=next[x]; end;end;begin readln(tt); for w:=1 to tt do begin fillchar(nexter,sizeof(nexter),0); fillchar(last,sizeof(last),0); fillchar(tot,sizeof(tot),0); fillchar(toter,sizeof(toter),0); readln(n); len:=0; for i:=1 to n do begin read(t[i]); for j:=1 to t[i] do begin read(a[i,j]); insert(i,a[i,j]); if j>1 then nexter[a[i,j-1]]:=a[i,j]; end; end; f[1,1]:=1; for i:=1 to n do for j:=1 to n do if i+j>2 then f[i,j]:=(f[i,j-1]+f[i-1,j]) mod 10007; dfs(1); for i:=1 to n do begin toter[a[i,t[i]]]:=tot[a[i,t[i]]]; for j:=t[i]-1 downto 1 do toter[a[i,j]]:=(tot[a[i,j]]+toter[a[i,j+1]]) mod 10007; end; node:=0; dp(1); writeln(g[1]); end;end.
阅读全文
0 0
- [jzoj]1794. 保镖排队(树形DP+想法)
- 【树形DP】保镖排队
- 【JZOJ】 【NOIP2014】【模拟试题】保镖排队
- 保镖排队
- 【动态规划】保镖排队
- [jzoj]1729. blockenemy(树形DP+详细分析)
- gym100796C(想法题/二分+树形dp)
- BSOJ 2927 -- 【模拟试题】保镖排队
- [jzoj]3482. 【NOIP2013模拟10.23】轮舞前夕(经典树形DP)
- [jzoj]5484. 【清华集训2017模拟11.26】快乐树(树形DP)
- jzoj 5006. 【NOI2017模拟3.8】A 树形dp
- jzoj 5040. 【NOI2017模拟4.2】押韵 trie树+树形dp
- jzoj 1154_购物_最大流/树形dp
- 【JZOJ 4811】排队
- 保镖
- 【JZOJ 3765】【BJOI2014】想法
- JZOJ 3765【BJOI2014】想法
- Orz教主第6次模拟赛之保镖排队
- PXE
- POJ.1426 Find The Multiple (BFS)
- HDU 1503 Advanced Fruits (公共子序列+输出)
- NYOJ 95-众数问题
- 廖雪峰Git教程笔记
- [jzoj]1794. 保镖排队(树形DP+想法)
- angularjs跨域请求
- spring 之ioc注解,案例,整合单元测试(02)
- tarjan模板及应用
- hhhhhhhhhhh
- C. Subset Sums----分桶法
- web推送--websocket协议
- 【模板】网络最大流
- VirtualBox 虚拟机复制