树规 [Heoi2013]Sao

告别环境配置烦恼:Docker容器化一站式搭建Zephyr RTOS开发环境 本文详细介绍了如何使用Docker容器化技术一站式搭建Zephyr RTOS开发环境,彻底解决环境配置不一致、依赖冲突等难题。通过预构建镜像、数据卷挂载和实战编译示例,帮助开发者快速获得隔离、一致且可复现的嵌入式开发环境,大幅提升开发效率和团队协作体验。 阅读详情

问题 J: [Heoi2013]Sao
时间限制: 3 Sec 内存限制: 256 MB
题目描述
WelcometoSAO(StrangeandAbnormalOnline)。这是一个VRMMORPG,
含有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输出。
样例输入
2
5
0 < 2
1 < 2
2 < 3
2 < 4
4
0 < 1
0 < 2
0 < 3
样例输出
4
6
提示
对于100%的数据有T≤5,1≤n≤1000。

明显是效率在N^2左右的树规。设f[i][j]为访问完i为根的子树,i点是第j个被访问的。考虑一棵子树一棵子树向上添加(不然时间效率上过不去)
把边视为无向边,只要分别考虑就行了。
先考虑当前儿子在此节点之前。
枚举x原来的排名为j,然后子节点子树里有k个点在x前面访问。要找出这k个点占了哪几个位置(一个组合数就行了,剩下的位置就给了原来的子树),而在后面的点也同样要确定位置。而这k点的顺序(方案)其实已经算好了。因为有k个点在x前,而son也在x前,所以son满足的状态就是f[son][1~k].用前缀和维护。
在考虑此节点在儿子之前,
改成后缀和就好了,一样的。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define ll long long
#define N 1012
#define P 1000000007
using namespace std;
struct road{int v,next,l;}lu[N*2];
int T,n,e,adj[N],sz[N];ll sum[N][N],f[N][N],g[N],C[N][N];
void add(int u,int v,int l){lu[++e]=(road){v,adj[u],l};adj[u]=e;}
void init()
{
    for(int i=0;i<=1000;i++)
        for(int j=0;j<=i;j++)
            if(j==i||j==0)C[i][j]=1;
            else C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;
}
void dfs(int x,int fa)
{
    sz[x]=1;f[x][1]=1;
    for(int i=adj[x];i;i=lu[i].next)
    {
        int to=lu[i].v;if(to==fa)continue;
        dfs(to,x);
        for(int j=1;j<=sz[x]+sz[to];j++)g[j]=0;
        for(int j=1;j<=sz[x];j++)
            for(int k=0;k<=sz[to];k++)
                if(lu[i].l==-1)(g[j+k]+=f[x][j]*sum[to][k]%P*C[j+k-1][j-1]%P*C[sz[to]+sz[x]-j-k][sz[x]-j]%P)%=P;
                else (g[j+k]+=f[x][j]*(sum[to][sz[to]]-sum[to][k]+P)%P*C[j+k-1][j-1]%P*C[sz[to]+sz[x]-j-k][sz[x]-j]%P)%=P;
        sz[x]+=sz[to];
        for(int j=1;j<=sz[x];j++)f[x][j]=g[j];
    }
    for(int i=1;i<=sz[x];i++)sum[x][i]=(sum[x][i-1]+f[x][i])%P;
}
char getc(){
    char ch=getchar();
    while(ch!='<'&&ch!='>')ch=getchar();
    return ch;
}
int main()
{
    scanf("%d",&T);
    init();
    while(T--)
    {
        e=0;
        memset(adj,0,sizeof(adj));
        memset(f,0,sizeof(f));
        memset(sum,0,sizeof(sum));
        memset(sz,0,sizeof(sz));
        scanf("%d",&n);char s;
        for(int i=1,x,y;i<n;i++)
        {
            scanf("%d",&x);s=getc();scanf("%d",&y);
            x++;y++;
            if(s=='<')add(x,y,1),add(y,x,-1);
            else add(x,y,-1),add(y,x,1);
        }
        dfs(1,0);
        printf("%lld\n",sum[1][sz[1]]);
    }
}
pscad IEEE标准系统搭建说明 pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。 立即下载

相关推荐

Python大数据舆情分析系统开发实战

舆情监测系统是大数据分析的重要应用场景,通过自然语言处理(NLP)技术解析社交媒体文本情感倾向。基于Python技术栈的解决方案整合了Scrapy爬虫框架进行数据采集,PySpark处理海量文本数据,结合SnowNLP和Jieba实现中文语义分析。系统采用微服务架构设计,包含数据采集层、处理层、存储层和应用层,通过情感分析优化和实时热点检测算法提升监测准确率。典型应用包括企业品牌监测、公共事件预警等场景,开发过程中需特别注意数据合规性和分布式集群的性能调优。

weixin_34408624的博客 387

[HEOI2013] SAO(dp + 组合数 + 前缀和)

三道题全都不会做,Oxide直接切疯了!

383

Windows下的Geant4安装教程

本教程将从0开始展示在Windows下如何安装Geant4,包括各种辅助工具(QT、Cmake、Visual Studio)的下载安装,环境变量的配置,以及example的生成等。

weixin_49065278的博客 4106

[HEOI2013]SAO ——计数问题

题目大意: Welcome to SAO ( Strange and Abnormal Online)。这是一个 VR MMORPG, 含有 n 个关卡。但是,挑战不同关卡的顺序是一个很大的问题。 有 n – 1 个对于挑战关卡的限制,诸如第 i 个关卡必须在第 j 个关卡前挑战, 或者完成了第 k 个关卡才能挑战第 l 个关卡。并且,如果不考虑限制的方向性, 那么在这 n – 1 个限制的情...

weixin_34026276的博客 176

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错

本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。

weixin_30635053的博客 419

实战|mitmproxy+Playwright 拦截篡改Cloudflare验证流程,实现无感爬取(2026实测可用)

2026年对抗Cloudflare,别再死磕滑块、轨迹、算法。高伪装浏览器 + 中间层劫持篡改验证流程Playwright + mitmproxy = 无感过CF这篇是纯实战、无废话、可直接上线的方案。你只要把目标网站、cf_clearance填进去,就能跑通。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1284

【题解】[HEOI2013]SAO

[HEOI2013]SAO 有一张连成树的有向图,求拓扑序的数量。如何厘清状态和方案是计数 dpdpdp 的难点。 如果看成 DAG,你会发现子树有重叠部分,不好计算。 考虑树形 dpdpdp ,设 fi,jf_{i,j}fi,j​ 表示 iii 在以 iii 为根的子树中拓扑序排名为 jjj 的方案数。 前置知识: m个相同的球放进n个不同的盒子 的方案数可以看做 m+n个相同的球放进n个不同的盒子中,每个盒子至少放一个球 ,插板法即可得 (m+n−1n−1)\binom{m+n-1}{n-1}(n−1m

cqbzlydd的博客 159

标准论文参考文献添加方法——Zotero入门使用教程

第一篇论文投出去了,写一下最后一步的参考文献修饰润色吧! 论文的参考文献,即References,是论文的最后一步,相信不管是写毕设论文还是期刊论文都遇到过需要修改参考文献的情况,非常之麻烦。而且参考文献中经常会与生僻奇怪气体出现,一个一个修改非常浪费时间,这里介绍一下一个非常好用的软件Zetero。 第一步:软件的下载安装及绑定Word 尽量使用客户端吧,

MISAYAONE的博客 20万+

bzoj3167 [Heoi2013]Sao(树形DP)

bzoj3167 [Heoi2013]Sao原题地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3167题意: WelcometoSAO(StrangeandAbnormalOnline)。这是一个VRMMORPG,含有n个关卡。但是,挑战不同关卡的顺序是一 个很大的问题。有n–1个对于挑战关卡的限制,诸如第i个关卡必须在第j个关卡前挑战,或

Bfk的博客 677

【WRF数据准备】气象驱动数据-ERA5再分析数据(Copernicus)

【WRF数据准备】气象驱动数据-ERA5再分析数据

WW、forever的博客 5529

基于 Simulink 的固态变压器(SST)多级协同控制实战教程

《固态变压器多级协同控制仿真指南》摘要: 本教程详细讲解了基于Simulink的固态变压器(SST)三级架构建模与控制方法。核心内容包含:1)搭建级联H桥整流(CHB)、双有源桥(DAB)和逆变器(VSI)的三级主电路;2)提出创新的多级协同控制策略,通过功率前馈实现输入输出级动态匹配;3)给出系统级功率平衡、单元级均压控制的具体实现方案。教程特别强调解决实际工程中的关键问题:代数环处理、软启动设计和刚性系统求解器选择,并提供了硬件在环(HIL)仿真建议。附带的MATLAB代码示例可直接用于实现电容电压均衡

xiaoheshang_123的博客 120

[HEOI2013]SAO

题目大意:   一个有向无环图上有n个结点,   现在告诉你n-1个条件(x,y),表示x和y的先后关系。   问原图共有几种可能的拓扑序? 思路:   树形DP。   f[i][j]表示对于第i个结点,有j个点在它前面的方案数。   设当前结点为x,后面有一个结点为y,原本x前有i个结点,y前有j个结点,我们可以得到状态转移方程:   f[x][size[x]-i+size[...

weixin_34417814的博客 151

pytorch实现基本的logistic和softmax回归实验(手动+torch)

前提:不是前馈神经网络,没有隐藏层。 一:Logistic回归实验–人工构造数据集,手动构造模型 要求: 动手从0实现logistic回归,实现二分类,人工构造数据集,并分析loss、训练集、测试集的准确率。(要求从零实现二元交叉熵) 实验过程: 1.1人工构造数据集 1. # #自定义数据---训练集 2. num_inputs = 2 3. n_data = torch.ones(1500, num_inputs) # 数据的基本形态 4. x1 = torch.normal(2 * n_d

qq_37534947的博客 1万+

【某集训记录】

  话说今天是DAY N了吧。。。好吧好吧,也就是DAY12   因为不写日记被嫌弃了。。。捂脸。 DAY XII   考试又炸了= =,T1以为每天只能有一个方向。。。然而,然而事实总是残酷的。T2离散以后数组大小是m离散前是n,好的,大家都知道发生什么了。T3。。眼睛越来越不好使了,n*m<=50愣是看成了n,m<=50,绝望。。。   下午讲了插头,听得是一脸懵逼,...

weixin_30352645的博客 158

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[HEOI2013]ALO-题解

【题目地址】 题目大意 给你nnn个互不相同的非负数,你可以选择一个区间l,rl,rl,r,这个区间的价值为该区间的次大值异或上该区间的另外一个值的最大值,求价值最大的区间。 显然考虑一个值异或一个区间的值的最大,我们可以用可持久化trie树解决。 但是不可能n2n^2n2枚举区间,所以我们考虑对于两个次大值相同的区间l1∼r1,l2∼r2l_1\sim r_1,l_2\sim r_2l1​∼...

TimeTraveller-VictoryCzt 423

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

BZOJ3167: [Heoi2013]Sao

所有限制关系无视方向是一棵树,那么任意定一个点为根,做树形DP,f[i][j]表示i在其子树的序列中排第j位的方案数,转移的话组合数弄一下,直接这样转移会发现复杂度很高,但是转移的方程可以转化一下,会发现每个点维护f值的前缀后缀和即可剪掉一维#include<set> #include<map> #include<deque> #include<queue> #include<stack> #inc

L_0_Forever_LF的专栏 1022

[HEOI2013]SAO(树上dp,计数)

[HEOI2013]SAO (这写了一个晚上QAQ,可能是我太蠢了吧.) 题目说只有\(n-1\)条边,然而每个点又相互联系.说明它的结构是一个类似树的结构,但是是有向边连接的,题目问的是方案个数,那么首先想到的肯定是树上dp. 但是这题有向边,从一个点出发,不一定可以遍历整棵树.那么肯定要对每条边建反边,打个标记分类讨论. 解决了建模的问题,接下来就是怎么dp了. 容易发现这个其实就是求这个"类...

weixin_30785593的博客 190

[bzoj3167][HEOI2013]SAO

题目大意 现在有N个点,两个点之间存在有向关系。无视关系的方向性后,N个点组成一颗树。现在问对该图做拓扑排序有多少种方法?N 当作树一样考虑 我们无视方向,把它当作一颗树,随意找一个点作根然后进行处理。 假设当前做到点x,先将x所有子树都做完,再把x与子树两两合并。 于是现在摆在我们面前的问题是:如何用状态表示一个图,并能快速实现合并两个只存在一条联系的图? 我们用f[i,j]表示

不来也不去的一只失忆蝴蝶 1751

[HEOI2013] SAO

Description给定一幅有向图,若忽略边的方向,其形态为一棵树,问其拓扑序的方案数。N≤105,M=N−1N\le10^5,M=N-1Analysis我们DP的思路是,对于一个限制(u,v)(u,v),要么是uu在vv前,要么是uu在vv后,在状态里面我们设uu所在的位置为jj,则我们要限制vv在jj前或后。设fi,jf_{i,j}为结点ii在其子树的序列中排第jj,考虑某个儿子chch(树上

My Stage 2116

[GDOI模拟2015.12.19][HEOI2013]SAO

题目大意 对nn个事件有n−1n-1个约束,表示为第ii个事件必须在第jj个之前(后)发生。求可能的事件排列(答案模109+710^9+7)。 将所有约束视为无向边,满足nn个事件在一个联通块内。 1≤n≤10001\le n\le1000 题目分析 一眼看去,题目条件和树有关,但是又有边的方向的限制,一下子好像变得很棘手。这是容易将题目看做拓扑图来解决,无异于给自己添麻烦。 其实

待成熟的葡萄 1592

[BZOJ3167][Heoi2013]Sao(树形DP+组合数学)

Address 洛谷P4099 BZOJ3167 Solution 定义状态: f[u][i]f[u][i]f[u][i] 表示 uuu 的子树内所有的点进行排列, uuu 排在位置 iii 的方案数。 考虑按照树形背包的方式转移,设 f′[u]f&amp;#x27;[u]f′[u] 为枚举到 uuu 的子节点 vvv 之前的 DP 数组。 如何合并 f′[u]f&amp;#x27;[u]f′[u...

女装的你,如此好看! 422

容斥原理 集合计数

问题 J: 集合计数 时间限制: 1 Sec 内存限制: 128 MB 题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模1000000007。(是质数喔~) 输入 一行两个整数N,K 输出 一行为答案。 样例输入 3 2 样例输出 6 提示 【样例说明】

蒟蒻QTY 1276

分层背包 [HNOI2007]梦幻岛宝珠

问题 I: [HNOI2007]梦幻岛宝珠 时间限制: 1 Sec 内存限制: 162 MB 提交: 32 解决: 6 [提交][状态][讨论版] 题目描述 给你N颗宝石,每颗宝石都有重量和价值。要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值。数据范围:N<=100;W<=2^30,并且保证每颗宝石的重量符合a*2^b(a<=10;b<=30)输入

蒟蒻QTY 1255

树DP 小奇的仓库(warehouse)

问题 C: 小奇的仓库(warehouse) 时间限制: 1 Sec 内存限制: 256 MB 提交: 121 解决: 30 [提交][状态] 题目描述 【题目背景】小奇采的矿实在太多了,它准备在喵星系建个矿石仓库。令它无语的是,喵星系的货运飞船引擎还停留在上元时代!【问题描述】喵星系有n个星球,星球以及星球间的航线形成一棵树。从星球a到星球b要花费[dis(a,b) Xor M]秒。

蒟蒻QTY 1230

数学 gcd

题面请去内网找这题的正解用到了容斥原理,只要统计出(用一个桶)有某个数作为因数的数的个数。sum[i]表示有多少数有一个因数是i. 很明显这样就可以利用容斥原理了。而容斥系数就是莫比乌斯函数,线性筛即可。ans只要在原有基础上+=μ[i]*sum[i]。#pragma GCC optimize("O3") #include<cstdio> #include<cstdlib> #include<cs

蒟蒻QTY 1172

bzoj3124 [Sdoi2013]直径 树的直径

问题 I: [Sdoi2013]直径 时间限制: 1 Sec 内存限制: 256 MB 题目描述 小Q最近学习了一些图论知识。根据课本,有如下定义。树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度。如果一棵树有N个节点,可以证明其有且仅有N-1 条边。 路径:一棵树上,任意两个节点之间最多有一条简单路径。我们用 dis(a,b) 表示点a和点b的路径上各边长度之和。称dis(a

蒟蒻QTY 1167

可持久化01Trie [Heoi2013]Alo

问题 I: [Heoi2013]Alo 时间限制: 3 Sec 内存限制: 256 MB 提交: 64 解决: 24 [提交][状态][讨论版] 题目描述 Welcome to ALO ( Arithmetic and Logistic Online)。这是一个VR MMORPG , 如名字所见,到处充满了数学的谜题。 现在你拥有n颗宝石,每颗宝石有一个能量密度,记为ai,这些宝石

蒟蒻QTY 1049
上一篇: 十月集训总结
下一篇: 概率DP Spoj4060 game with probability Problem
QTY_
博客等级 码龄9年 13粉丝 211原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值