20230922 比赛总结

news2024/12/24 9:15:49

反思

A

考场降智,没想到拆分成 2 α 5 β x 2^{\alpha}5^{\beta}x 2α5βx 的形式,一直在卡精度(thx anti)

B

又是随机题,又是 b l bl bl 题,差点又被区分了

C

我是 s b sb sb,排序顺序有点小问题 + + + 没判 − 1 -1 1(没判 − 1 -1 1 小样例都过不了,本来想后面补的,结果忘了/fk)

题解

D

把行编号为 1 − n 1-n 1n,把列编号为 n + 1 − 2 n n+1-2n n+12n
考虑将有小球的位置 ( x , y ) (x,y) (x,y),把行和列连边,即 x x x y + n y+n y+n 连边

考虑每一个小球一定会匹配行或列,那么我们如果把 x → y + n x\to y+n xy+n 连边表示 ( x , y ) (x,y) (x,y) 的小球选第 x x x 行,反之同理
考虑这样一定会形成内向基环树森林,因为每个行或列只会匹配一个
考虑忽略我们自行添加的有向的条件,变成无向
那么指定方向的方案数只有 2 2 2 种,即环的方向
现在需要计算当前方案的启动顺序

考虑回到原图中,我们可以把一定在 x x x 之后启动的点连向它,不难发现,这样的点只有一个,可以画个图理解:
在这里插入图片描述

只有这样的情况是需要连边的
这样就会形成森林,然后只要统计树的拓扑序计数即可
简单树形 d p dp dp 解决

时间复杂度 O ( n ) O(n) O(n),感觉是到典题

#include <bits/stdc++.h>
using namespace std;
const int N=200100,P=1e9+7;
int n,fac[N],inv[N];
int e[N<<1],ne[N<<1],h[N],idx;
int circ,depth[N],fa[N],siz[N],f[N];
bool onc[N],ntrt[N];
vector<int> cir,pts,son[N];
inline int read(){
	int FF=0,RR=1;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
	for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
	return FF*RR;
}
int C(int a,int b){
    if(a<b||b<0) return 0;
    return 1ll*fac[a]*inv[b]%P*inv[a-b]%P;
}
void dfs1(int u){
	pts.push_back(u);
	depth[u]=depth[fa[u]]+1;
	for(int i=h[u];~i;i=ne[i]){
		int v=e[i];
		if(v==fa[u]) continue;
        if(!depth[v]) fa[v]=u,dfs1(v);
		else if(depth[v]<depth[u]){
			circ++;
			for(int x=u;x!=v;x=fa[x]) cir.push_back(x),onc[x]=1;
			cir.push_back(v),onc[v]=1;
		}
	}
}
void dfs2(int u){
	for(int i=h[u];~i;i=ne[i]){
		int v=e[i];
		if(!onc[v]&&v!=fa[u]) fa[v]=u,dfs2(v);
	}
}
void dfs3(int u){
	f[u]=1,siz[u]=0;
	for(int v:son[u]){
		dfs3(v);siz[u]+=siz[v];
		f[u]=1ll*f[u]*f[v]%P*C(siz[u],siz[v])%P;
	}
	siz[u]++;
}
void add(int x,int y){ e[idx]=y,ne[idx]=h[x],h[x]=idx++;}
int qmi(int a,int b){
    int res=1;
    for(;b;b>>=1){
        if(b&1) res=1ll*res*a%P;
        a=1ll*a*a%P;
    }
    return res;
}
int main(){
    freopen("ball.in","r",stdin);
    freopen("ball.out","w",stdout);
	fac[0]=1;
	for(int i=1;i<N;i++) fac[i]=1ll*fac[i-1]*i%P;
	inv[N-1]=qmi(fac[N-1],P-2);
	for(int i=N-2;i>=0;i--) inv[i]=1ll*inv[i+1]*(i+1)%P;
	n=read();
	memset(h,-1,sizeof(h));
	for(int i=1;i<=n<<1;i++){
		int x=read(),y=read();
		add(x,y+n),add(y+n,x);
	}
	int ans=1,tott=0;
	for(int i=1;i<=n<<1;i++){
		if(depth[i]) continue;
		circ=0;cir.clear(),pts.clear();
		dfs1(i);
		if(circ!=1){ puts("0");exit(0);}
		for(int u:cir) fa[u]=0,dfs2(u);
		int tres=0;
		for(int type=0;type<2;type++){
			if(type){
				for(int i=0;i<cir.size()-1;i++) fa[cir[i]]=cir[i+1];
				fa[cir[cir.size()-1]]=cir[0];
			}
			else{
				for(int i=1;i<cir.size();i++) fa[cir[i]]=cir[i-1];
				fa[cir[0]]=cir[cir.size()-1];
			}
            for(int u:pts) ntrt[u]=0,son[u].clear();
			for(int u:pts) if(fa[fa[u]]>u) ntrt[u]=1,son[fa[u]].push_back(u);//表示fa[u]一定在u后面选择
			int cur=0,res=1;
			for(int u:pts) if(!ntrt[u]){
				dfs3(u);cur+=siz[u];
				res=1ll*res*f[u]%P*C(cur,siz[u])%P;
			}
			tres=(tres+res)%P;
		}
        tott+=pts.size();
		ans=1ll*ans*tres%P*C(tott,pts.size())%P;
	}
	printf("%d\n",ans);
	fprintf(stderr,"%d ms\n",int(1e3*clock()/CLOCKS_PER_SEC));
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

concrt140.dll丢失怎么恢复?教你三种最简单的解决方法

今天早上&#xff0c;当我打开电脑时&#xff0c;突然看到一个提示窗口&#xff0c;显示找不到 concrt140.dll 文件。我一下子懵了&#xff0c;不知道这是怎么回事&#xff0c;也不知道如何解决这个问题。于是&#xff0c;我开始了寻找答案的旅程。首先&#xff0c;我了解到 co…

深入理解浏览器渲染原理

文章目录 浏览器是如何渲染页面的渲染流程解析HTML&#xff08;构建DOM树&#xff09;解析过程中遇到JS代码 样式计算1. 解析CSS代码2. 转换样式表中的属性值&#xff0c;使其标准化3. 计算DOM树中每个节点的具体样式CSS继承规则CSS层叠规则 布局分层分层update layer tree 绘制…

博物馆藏品管理系统-美术馆藏品管理系统

一、项目背景 文物作为前史留存下来最为珍贵的遗物&#xff0c;具有非常高的科学价值和艺术价值&#xff0c;博物馆的存在便是为了保存这些珍贵的前史文化遗产&#xff0c;所以对博物馆的建造必定要重视品质问题。对博物馆的库存办理工作也必定要注意细节&#xff0c;不能出一…

【LeetCode热题100】--20.有效的括号

20.有效的括号 使用栈&#xff1a; class Solution {public boolean isValid(String s) {Stack<Character> stack new Stack<>();int num s.length();for(int i 0;i<num;i){char c s.charAt(i);if(c(||c[||c{){stack.push(c);}else if(stack.isEmpty() ||c…

矩阵求导中的分子布局和分母布局

1.求偏导的自变量的符号区别 使用标量、向量和矩阵总共有九种可能性。请注意&#xff0c;当我们考虑每个自变量和因变量中更多数量的分量时&#xff0c;我们可能会留下非常多的可能性。下表收集了最能以矩阵形式最整齐地组织的六种导数。 在这里&#xff0c;我们使用了最一般…

AI配套的技术: 矢量数据库的概念

一、说明 随着人工智能的快速采用和围绕大型语言模型发生的创新&#xff0c;我们需要在所有这些的中心&#xff0c;能够获取大量数据&#xff0c;将其上下文化&#xff0c;处理它&#xff0c;并使其能够有意义地搜索。 为原生整合生成式 AI 功能而构建的生成式 AI 流程和应用程…

Java+Redis:布隆过滤器,打造高效数据过滤神器!

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

基于蝴蝶优化的BP神经网络(分类应用) - 附代码

基于蝴蝶优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蝴蝶优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蝴蝶优化BP神经网络3.1 BP神经网络参数设置3.2 蝴蝶算法应用 4.测试结果&#xff1a;5.M…

IIC学习笔记(参考小梅哥教程)

IIC: inter-integrated circuit bus ,即 集成电路总线&#xff0c;串行通信&#xff0c;多主从架构&#xff0c;半双工&#xff08;对讲机&#xff09;&#xff0c;小数据量场合&#xff0c;短距离传输。 速率&#xff1a;100kb/s 、 400kb/s 、 3.4Mkb/s 传输单位&#xff1…

《C和指针》笔记31:多维数组的数组名、指向多维数组的指针、作为函数参数的多维数组

文章目录 1. 指向多维数组的数组名2. 指向多维数组的指针3. 作为函数参数的多维数组 1. 指向多维数组的数组名 我们知道一维数组名的值是一个指针常量&#xff0c;它的类型是“指向元素类型的指针”&#xff0c;它指向数组的第1个元素。那么多维数组的数组名代表什么呢&#x…

【C++】你看懂C++的类和对象了么

目录 类 默认成员函数 构造函数 析构函数 拷贝构造函数 赋值运算符重载 运算符重载 赋值运算符重载 前置和后置重载 const成员 取地址及const取地址操作符重载 再谈构造函数 构造函数体赋值 初始化列表 explicit关键字 static成员 友元 友元函数 友元类 内…

Springboot+vue的时间管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的时间管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的时间管理系统&#xff0c;采用M&#xff08;model&#xff0…

计算机毕设 大数据工作岗位数据分析与可视化 - python flask

文章目录 0 前言1 课题背景2 实现效果3 项目实现3.1 概括 3.2 Flask实现3.3 HTML页面交互及Jinja2 4 **完整代码**5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要…

使用VSCode插件开发Hyperledger Fabric智能合约(链码)

背景 开发Fabric链码对于开发者而言步骤繁琐&#xff1a;需要部署节点、安装链码、重启网络等操作。当前VSCode中的插件“Hyperledger Fabric Debugger”可以帮助我们迅速开发智能合约。 使用步骤 安装插件 在VSCode中安装Hyperledger Fabric Debugger插件 打开要开发链码的…

【LeetCode热题100】--35.搜索插入位置

35.搜索插入位置 使用二分查找&#xff1a; class Solution {public int searchInsert(int[] nums, int target) {int low 0,high nums.length -1;while(low < high){//注意每次循环完都要计算midint mid (low high)/2;if(nums[mid] target){return mid;}if(nums[mid]…

SE、CBAM、ECA 、CA注意力机制

文章目录 1. SE (Squeeze-and-Excitation)2. CBAM (Convolutional Block Attention Module)3. ECA (Efficient Channel Attention)4. CA (Coordinate Attention) 1. SE (Squeeze-and-Excitation) SENet是通道注意力机制的典型实现 对于SENet而言&#xff0c;其重点是获得输入进…

螺杆支撑座有哪些品牌?

螺杆支撑座是机械设备中重要的支撑部件&#xff0c;用于固定和支撑螺杆&#xff0c;以确保机械设备的稳定性和精度。以下是一些生产螺杆支撑座的品牌以及它们的特点&#xff1a; 1、NSK&#xff1a;提供各种高质量的轴承和机械部件&#xff0c;他们的螺杆支撑座采用先进的制造技…

2023.9.26 IO 文件操作详解

目录 文件 文件路径 文件类型 Java 文件操作 文件系统操作 文件内容操作 字节流 InputStream OutputStream 字符流 Reader Writer 补充 close 的必要性 Scanner 的基本了解 文件 当前指硬盘上的文件和文件夹相对于 变量 在内存中&#xff0c;文件 则是在硬盘上 …

竞赛选题 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

sheng的学习笔记-【中文】【吴恩达课后测验】Course 2 - 改善深层神经网络 - 第二周测验

课程2_第2周_测验题 目录&#xff1a;目录 第一题 1.当输入从第8个mini-batch的第7个的例子的时候&#xff0c;你会用哪种符号表示第3层的激活&#xff1f; A. 【  】 a [ 3 ] { 8 } ( 7 ) a^{[3]\{8\}(7)} a[3]{8}(7) B. 【  】 a [ 8 ] { 7 } ( 3 ) a^{[8]\{7\}(3)} a…