zoukankan      html  css  js  c++  java
  • 要做的题

    省选:
    [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]高中生数学题

  • 相关阅读:
    Dockerfile简介及基于centos7的jdk镜像制作
    docker数据卷(Data Volumes)
    docker入门及常用命令
    Failed to start bean ‘org.springframework.kafka.config.internalKafkaListenerEndpointRegistry
    dubbo服务启动报:qos-server can not bind localhost:22222s
    Dubbo服务调用Failed to invoke the method错误记录
    java8-list转Map
    git remote: HTTP Basic: Access denied 错误解决办法
    SSH整合(二)
    SSH整合
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13193881.html
Copyright © 2011-2022 走看看