省选:
[HNOI2015]开店
[HNOI2015]接水果
[HNOI2015]亚瑟王
[HNOI2015]实验比较
其实这题也是个套路。
先把所有被等号连接的变量缩成一个点。
题目中说明了(M<=n),所以如果把一个点向强制比它大的点连边则形成了基环内向森林。
其中,有环的连通块一定无解,可以使用拓扑排序判定。
判完无解后,使用一个超级源点(s)向所有树根连边。这样子答案不变,因为超级源点的值肯定是(<=)其他点的。
根据套路设(f_x)表示x点的答案。但是在合并两棵子树时,小于号和等于号十分麻烦。
注意到子树的方案一定是有若干个小于号和等于号连接的。
所以设(f_{x,i})表示(x)的子树中有(i)个段,每个段使用等号连接,不同的段之间用不等式连接。且第一个段中要包含(x)。
考虑合并两棵树(x,y),假设(x)有(i)个段,(y)有(j)个段,合并到的新树(x')有(k)个段。
(x')中的每一段可以是(x)(y)的某一段,也能是(x,y)的两段。
但是不能来自同一棵子树,因为在子树中大小关系已经确定。
则系数是(C_{i-1}^{j-1}*{C_{j-1}^{k-i+j}})。
原因是枚举(y)中的(j-1)段在(x')放的位置,再把(x)的(i-j)段放在剩下的位置,使得每一段都不为空。
(x')中还剩下(k-i+j)段,考虑和(y)中的段合并。
由于根必须在第一段,所以转移系数的上面下面部分都要-1。
[HNOI2015]落忆枫音
为什么我想到了容斥想到了计算公式却做不出来。。。。
题目要求我们加一条边后求出从1号点开始的有向树。
如果加的边的出点是1,则这条边是无效的。
只需要考虑加的边的出点不是1的情况。
加了边后,图中可能有若干个环,可以容斥,算出一定要包含环的树的个数再用答案减去。
先考虑总方案怎么计算。如果不考虑是否合法,则一个点可以选出恰好一个前驱,答案就是所有点(v)的(deg_{v})的乘积。
加了边考虑如何计算答案。设加了边后的度数数组为(deg'),(deg')的每一个元素的乘积为(ans)。则(ans)再除以环上的边就是要包含环的有向树的个数。
可以(dp)计算。设(f_{i})表示(t)点->(i)点的边的(deg)值的逆元之和,最后乘上ans就是要扣去答案。
则先(f_i*=frac{1}{deg'_i})再(f_{v}+=f_{i}),其中(v)和(i)在未加边的原图中有边,表示累积路径的权值。并且计算(deg)的乘积。
#include<bits/stdc++.h>
using namespace std;
#define N 500010
#define int long long
#define mo 1000000007
int n,m,h[N],v[N*2],nxt[N*2],f[N],ec,x,y,d[N],tv[N];
void add(int x,int y){v[++ec]=y;nxt[ec]=h[x];h[x]=ec;}
int qp(int x,int y){
int r=1;
for(;y;y>>=1,x=x*x%mo)
if(y&1)r=r*x%mo;
return r;
}
signed main(){
freopen("maple.in","r",stdin);
freopen("maple.out","w",stdout);
cin>>n>>m>>x>>y;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
add(x,y);
d[y]++;
tv[y]++;
}
d[y]++;
int ans=1;
for(int i=2;i<=n;i++)
ans=ans*d[i]%mo;
f[y]=ans;
queue<int>q;
for(int i=1;i<=n;i++)
if(!tv[i])q.push(i);
while(!q.empty()){
int x=q.front();
q.pop();
f[x]=f[x]*qp(d[x],mo-2)%mo;
for(int i=h[x];i;i=nxt[i]){
f[v[i]]=(f[x]+f[v[i]])%mo;
tv[v[i]]--;
if(!tv[v[i]])
q.push(v[i]);
}
}
if(y==1)cout<<ans;
else cout<<(ans-f[x]+mo)%mo;
}
[SDOI2015]嫁接树
[SDOI2015]排序
[SDOI2015]模拟电路
[SDOI2015]道路修建
[SDOI2015]立体图
[SDOI2015]星际战争
[SDOI2015]序列统计
[SDOI2015]旅行计划
[SDOI2015]寻宝游戏
[SDOI2015]音质检测
[SDOI2015]双旋转字符串
[ZJOI2015]幻想乡战略游戏
[ZJOI2015]诸神眷顾的幻想乡
[ZJOI2015]醉熏熏的幻想乡
[ZJOI2015]幻想乡 Wi-Fi 搭建计划
[JSOI2016]灯塔
[JSOI2016]位运算
[JSOI2016]轻重路径
[JSOI2016]无界单词
[JSOI2016]飞机调度
[JSOI2016]反质数序列
[JSOI2016]炸弹攻击2
[JSOI2016]炸弹攻击1
[JSOI2016]独特的树叶
[JSOI2016]扭动的回文串
[GDOI2016]中学生数学题
[GDOI2016]最长公共子串dp
[GDOI2016]有趣的一关
[GDOI2016]疯狂动物城
[GDOI2016]SigemaGO
[GDOI2016]森林之家
[GDOI2016]机密网络
[GDOI2016]飞机
[GDOI2016]互补约数
[GDOI2016]星际穿越
[GDOI2016]回文树
[GDOI2016]盒子
[JSOI2018]列队
[JSOI2018]战争
[JSOI2018]绝地反击
[JSOI2018]潜入行动
[JSOI2015]salesman
[JSOI2015]isomorphism
[JSOI2015]symmetry
[JSOI2015]圈地
[JSOI2015]最小表示
[JSOI2015]套娃
[JSOI2015]染色问题
[JSOI2015]子集选取
[JSOI2015]串分割
[JSOI2015]非诚勿扰
[JSOI2015]地铁线路
[JSOI2015]字符串树
[JSOI2015]送礼物
[JSOI2015]最大公约数
[ZJOI2016]旅行者
[SDOI2016]征途
[SDOI2016]齿轮
[SDOI2016]游戏
[SDOI2016]硬币游戏
[SDOI2016]储能表
[SDOI2016]探险路线
[SDOI2016]生成魔咒
[SDOI2016]数字配对
[SDOI2016]模式字符串
[SDOI2017]天才黑客
[SDOI2017]新生舞会
[SDOI2017]遗忘的集合
[SDOI2017]相关分析
[SDOI2017]文本校正
[SDOI2017]序列计数
[SDOI2018]战略游戏
[SDOI2018]物理实验
[SDOI2018]荣誉称号
[SDOI2018]原题识别
[SDOI2019]染色
[SDOI2019]快速查询
[SDOI2019]热闹的聚会与尴尬的聚会
[AH2017/HNOI2017]单旋
[JLOI2016]圆的异或并
[JLOI2016]字符串覆盖
[JLOI2016]成绩比较
[六省联考2017]摧毁“树状图”
[八省联考2018]劈配
[十二省联考2019]骗分过样例
[GDOI2015]大冒险
[GDOI2015]粗心的邮差
[GDOI2015]Hearth Stone
[GDOI2015]旅行
[GDOI2015]推箱子
[GDOI2015]水题
[GDOI2015]短信加密
[GDOI2015]组织
[GDOI2015]循环排插
[GDOI2015]覆盖半径
[GDOI2015]小Z的旅行路线
[GDOI2015]ACU
[GDOI2017]房屋购置
[GDOI2017]取石子游戏
[GDOI2017]微信
[GDOI2017]小学生几何题
[GDOI2017]RPG
[GDOI2017]凡喵识图
[GDOI2017]小学生语文题dp
[GDOI2017]王国守卫
[GDOI2017]逃亡
[GDOI2017]魔兽争霸
[GDOI2017]幸运串
[GDOI2017]中学生数据结构题
[GDOI2018]农场
[GDOI2018]密码锁
[GDOI2018]涛涛接苹果
[GDOI2018]小学生图论题
[GDOI2018]谈笑风生
[GDOI2018]滑稽子图
[GDOI2018]木板
[GDOI2018]巡逻
[GDOI2018]谁是冠军
[GDOI2018]基地
[GDOI2018]水猴
[GDOI2019]颜色
[GDOI2019]棋盘
[GDOI2019]丛林守护者
[GDOI2019]滑稽二乘法
要复习:
[ZJOI2015]地震后的幻想乡
[JSOI2016]病毒感染
[JSOI2019]节日庆典
[JSOI2018]防御网络
[JSOI2018]机器人
[ZJOI2016]线段树
[SDOI2016]墙上的句子
[SDOI2016]平凡的骰子
[SDOI2017]切树游戏
[SDOI2017]树点涂色
[SDOI2017]龙与地下城
[SDOI2017]苹果树
[SDOI2017]数字表格
[SDOI2017]硬币游戏
[SDOI2018]旧试题
[SDOI2018]反回文串
[SDOI2019]连续子序列
[SDOI2019]世界地图
[SDOI2019]移动金币
[ZJOI2019]开关
[ZJOI2019]麻将
[ZJOI2019]线段树
[ZJOI2019]Minimax搜索
[ZJOI2019]浙江省选
[HNOI/AHOI2018]排列
[HNOI/AHOI2018]转盘
[HNOI/AHOI2018]毒瘤
[HNOI/AHOI2018]游戏
[HNOI/AHOI2018]寻宝游戏
[HNOI2019]鱼
[HNOI2019]JOJO
[HNOI2019]序列
[HNOI2019]校园旅行
[HNOI2019]白兔之舞
[HNOI2019]多边形
[AHOI2017/HNOI2017]大佬
[AH2017/HNOI2017]影魔
[AH2017/HNOI2017]抛硬币
[AH2017/HNOI2017]队长快跑
[JLOI2016]方
[JLOI2016/SHOI2016]侦察守卫
[GDOI2019]送分大水题
[GDOI2019]小说
[GDOI2019]高中生数学题