[BZOJ3167][P4099][HEOI2013]SAO(树形DP)
题目描述
Welcome to SAO ( Strange and Abnormal Online)。这是一个 VR MMORPG, 含有 n 个关卡。但是,挑战不同关卡的顺序是一个很大的问题。
有 n – 1 个对于挑战关卡的限制,诸如第 i 个关卡必须在第 j 个关卡前挑战, 或者完成了第 k 个关卡才能挑战第 l 个关卡。并且,如果不考虑限制的方向性, 那么在这 n – 1 个限制的情况下,任何两个关卡都存在某种程度的关联性。即, 我们不能把所有关卡分成两个非空且不相交的子集,使得这两个子集之间没有任 何限制。
输入输出格式
输入格式:
第一行,一个整数 T,表示数据组数。
对于每组数据,第一行一个整数 n,表示关卡数。接下来 n – 1 行,每行为 “i sign j”,其中 0 ≤ i, j ≤ n – 1 且 i ≠ j,sign 为“<”或者“>”,表示第 i 个关卡 必须在第 j 个关卡前/后完成。
输出格式:
对于每个数据,输出一行一个整数,为攻克关卡的顺序方案个数,mod 1,000,000,007 输出。
输入输出样例
说明
对于 20%的数据有 n ≤ 10。
对于 40%的数据有 n ≤ 100。
对于另外 20%的数据有,保证数据中 sign 只会是<,并且 i < j。
对于 100%的数据有 T ≤ 5,1 ≤ n ≤ 1000。
洛谷上都有的题BZ怎么还权限啊。。
这题在某种意义上和 [HNOI2015]实验比较 有相似之处,主要思路是通过树形DP和组合数求解。
直接给出状转方程:$f[i][j]$表示以$i$为根的子树中,$i$排在第$j$位的方案数。乘上组合数即可。
https://www.cnblogs.com/CQzhangyu/p/7605703.html、
最后前缀和优化那一步可能不太一样。但都是$O(n^3)$的,不知道是怎么过的,应该是因为根本跑不满。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mem(a) memset(a,0,sizeof(a))
#define rep(i,l,r) for (int i=l; i<=r; i++)
using namespace std; const int N=,mod=;
char c;
int n,T,u,v,cnt,C[N][N],g[N],f[N][N],to[N],sum[N][N],sz[N],h[N],nxt[N],val[N];
void add(int u,int v,int w){ to[++cnt]=v; val[cnt]=w; nxt[cnt]=h[u]; h[u]=cnt; }
void init(){ cnt=; mem(h); mem(f); mem(sum); mem(sz); } void dfs(int x,int fa){
f[x][]=sum[x][]=sz[x]=;
for (int i=h[x],s; i; i=nxt[i]) if ((s=to[i])!=fa){
dfs(s,x); mem(g);
if (val[i]==){
rep(i,,sz[x]) if (f[x][i]) rep(j,,sz[s]) if (sum[s][j])
g[i+j]=(g[i+j]+1ll*f[x][i]*sum[s][j]%mod*C[i+j-][i-]%mod*C[sz[x]-i+sz[s]-j][sz[x]-i]%mod)%mod;
}else{
rep(i,,sz[x]) if (f[x][i]) rep(j,,sz[s])
g[i+j]=(g[i+j]+1ll*f[x][i]*(sum[s][sz[s]]-sum[s][j]+mod)%mod*C[i+j-][i-]%mod*C[sz[x]-i+sz[s]-j][sz[x]-i])%mod;
}
sz[x]+=sz[s];
rep(i,,sz[x]) f[x][i]=g[i],sum[x][i]=(sum[x][i-]+g[i])%mod;
}
} int main(){
freopen("bzoj3167.in","r",stdin);
freopen("bzoj3167.out","w",stdout);
rep(i,,) C[i][]=;
rep(i,,) rep(j,,) C[i][j]=(C[i-][j-]+C[i-][j])%mod;
for (scanf("%d",&T); T--; ){
init(); scanf("%d",&n);
rep(i,,n){
scanf("%d %c%d",&u,&c,&v); u++; v++;
if (c=='>') swap(u,v);
add(u,v,); add(v,u,);
}
dfs(,); printf("%d\n",sum[][sz[]]);
}
return ;
}
[BZOJ3167][P4099][HEOI2013]SAO(树形DP)的更多相关文章
- 3167: [Heoi2013]Sao [树形DP]
3167: [Heoi2013]Sao 题意: n个点的"有向"树,求拓扑排序方案数 Welcome to Sword Art Online!!! 一开始想错了...没有考虑一个点 ...
- BZOJ 3167 [Heoi2013]Sao ——树形DP
BZOJ4824的强化版. 改变枚举的方案,使用前缀和进行DP优化. 然后复杂度就是$O(n^2)$了. #include <map> #include <cmath> #in ...
- 洛谷 4099 [HEOI2013]SAO——树形DP
题目:https://www.luogu.org/problemnew/show/P4099 结果还是看了题解才会…… 关键是状态,f[ i ][ j ] 表示 i 子树. i 号点是第 j 个出现的 ...
- P4099 [HEOI2013]SAO(树形dp)
P4099 [HEOI2013]SAO 我们设$f[u][k]$表示以拓扑序编号为$k$的点$u$,以$u$为根的子树中的元素所组成的序列方案数 蓝后我们在找一个以$v$为根的子树. 我们的任务就是在 ...
- P4099 [HEOI2013]SAO
P4099 [HEOI2013]SAO 贼板子有意思的一个题---我()竟然没看题解 有一张连成树的有向图,球拓扑序数量. 树形dp,设\(f[i][j]\)表示\(i\)在子树中\(i\)拓扑序上排 ...
- 【BZOJ3167】[HEOI2013]SAO(动态规划)
[BZOJ3167][HEOI2013]SAO(动态规划) 题面 BZOJ 洛谷 题解 显然限制条件是一个\(DAG\)(不考虑边的方向的话就是一棵树了). 那么考虑树型\(dp\),设\(f[i][ ...
- 洛谷 P4099 - [HEOI2013]SAO(树形 dp)
题面传送门 题意: 有一个有向图 \(G\),其基图是一棵树 求它拓扑序的个数 \(\bmod (10^9+7)\) \(n \in [1,1000]\) 如果你按照拓扑排序的方法来做,那恐怕你已经想 ...
- 洛谷P4099 [HEOI2013]SAO(树形dp)
传送门 HEOI的题好珂怕啊(各种意义上) 然后考虑树形dp,以大于为例 设$f[i][j]$表示$i$这个节点在子树中排名第$j$位时的总方案数(因为实际只与相对大小有关,与实际数值无关) 我们考虑 ...
- 洛谷$P4099\ [HEOI2013]\ SAO\ dp$
正解:树形$dp$ 解题报告: 传送门$QwQ$. 考虑设$f_i$表示点$i$的子树内的拓扑序排列方案数有多少个. 发现这样不好合并儿子节点和父亲节点.于是加一维,设$f_{i,j}$表示点$i$的 ...
随机推荐
- Bazinga(HDU5510+KMP)
t题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题目: 题意:找到一个编号最大的字符串满足:存在一个编号比它小的字符串不是它的字串. 思路:K ...
- CentOS7修改默认运行级别
新装了一个虚拟机,图形界面启动太慢,想调整一下按照以前的经验改运行级别,输入: vi /etc/inittab 然后发现跟之前不一样了,在inittab设置不再生效: # inittab is no ...
- Android控件——TextView,EditText
TextView: 显示文本控件 EditText 输入文本框 1.TextView常用属性:
- linux 3389连接工具Rdesktop
简单使用 工作机换成战斗机了,改用ubuntu,原来的windows7上东西笔记多,还不想重装.用rdesktop来远程连接windows: sudo apt-get install rdesktop ...
- Microsoft Security Essential: 微软安全软件
Microsoft Security Essential: 微软安全软件 这个杀毒软件终身免费
- 64_l6
lightdm-qt5-devel-1.22.0-1.fc26.i686.rpm 19-May-2017 11:11 22854 lightdm-qt5-devel-1.22.0-1.fc26.x86 ...
- 64_k1
KoboDeluxe-0.5.1-22.fc26.x86_64.rpm 13-Feb-2017 22:11 1626454 k3b-17.04.1-1.fc26.x86_64.rpm 25-May-2 ...
- 1002: 当不成勇者的Water只好去下棋了---课程作业---图的填色
1002: 当不成勇者的Water只好去下棋了 Time Limit: 1 Sec Memory Limit: 128 MB Description 由于魔王BOSS躲起来了,说好要当勇者的Wate ...
- pom报错解决方法大全
1.Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom 解决方法: Windows: CMD --> c ...
- [PAT] 1144 The Missing Number(20 分)
1144 The Missing Number(20 分) Given N integers, you are supposed to find the smallest positive integ ...