P7531 [USACO21OPEN] Routing Schemes P 题解

news/2024/12/18 17:03:21/文章来源:https://www.cnblogs.com/JiaY19/p/18615392

best 定理居然还有运用范围。

思路

考虑如何来判断是否有解。

由于每一条边都需要用到。

但是它是使用很多条路径进行覆盖。

我们考虑一个很巧妙的转化。

建立一个超级源点,源点向每一条路径的开头连一条边。每一条路径的结尾向源点连一条边,这样一条路径就变成了一个回路。

把所有回路连起来,就是一条欧拉回路。

问题转化成了欧拉回路计数。

对于欧拉回路计数,我们有经典的 best 定理。

它描述的是这样一个东西。

\[ans=内向树个数\times \prod (deg_i-1)! \]

内向树个数容易使用矩阵树定理求出。

考虑这个题实际求的是匹配路径方案数。

所以要把源点的 \((deg_i-1)!\) 除掉。

时间复杂度:\(O(Tn^3)\)

Code

#include <bits/stdc++.h>
using namespace std;const int mod = 1e9 + 7;int n, k, ru[110], cu[110];
int f[110];
int a[110][110];inline int power(int x, int y) {int res = 1;while (y) {if (y & 1) res = 1ll * res * x % mod;x = 1ll * x * x % mod, y >>= 1;}return res;
}
inline int gauss() {int res = 1;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)if (a[i][j] < 0) a[i][j] += mod;for (int i = 1; i <= n; i++) {if (ru[i] == 0 && cu[i] == 0) continue;int id = i;for (int j = i; j <= n; j++) if (a[j][i]) id = j;if (id != i) {swap(a[i], a[id]), res = mod - res;}int p = power(a[i][i], mod - 2);for (int j = i + 1; j <= n; j++) {int c = 1ll * a[j][i] * p % mod;for (int k = i; k <= n; k++) {a[j][k] = (a[j][k] - 1ll * a[i][k] * c) % mod;if (a[j][k] < 0) a[j][k] += mod;}}}for (int i = 1; i <= n; i++)if (ru[i] || cu[i]) res = 1ll * res * a[i][i] % mod;return res;
}
inline void solve() {cin >> n >> k;for (int i = 1; i <= n; i++) {char c;cin >> c;if (c == 'S') a[0][i]--, a[0][0]++, cu[0]++, ru[i]++;if (c == 'R') a[i][0]--, a[i][i]++, cu[i]++, ru[0]++;}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {char c;cin >> c;if (c == '1') {a[i][j]--;a[i][i]++;cu[i]++, ru[j]++;}}}bool flag = 0;for (int i = 0; i <= n; i++)if (ru[i] != cu[i]) flag = 1;if (flag == 0) {int ns = gauss();for (int i = 1; i <= n; i++)if (cu[i]) ns = 1ll * ns * f[cu[i] - 1] % mod;cout << ns << "\n";} else {cout << 0 << "\n";}memset(a, 0, sizeof a);memset(ru, 0, sizeof ru);memset(cu, 0, sizeof cu);
}int main() {int t;cin >> t;f[0] = 1;for (int i = 1; i <= 100; i++) f[i] = 1ll * f[i - 1] * i % mod;while (t--) solve();
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

活动策划还能这样做,效率提升看得见!

文档协同如何助力电商团队降本增效? 电商行业以快著称,活动运营的每一秒都可能决定销量的成败。然而,在紧张的时间表下,如何确保团队成员高效协同,是很多电商运营者面临的难题。文档协同成为破解这一问题的关键手段。 打破信息差,构建透明化流程 在大型电商活动中,信息孤…

用WPF实现桌面锁屏壁纸的应用

用WPF实现桌面锁屏壁纸的应用 目录用WPF实现桌面锁屏壁纸的应用需求分析需求方案实现App.xamlApp.xaml.csMainWindow.xamlMainWindow.xaml.csImportImageHelper.csKeyboardHookLib.cs壁纸 需求分析 需求存取数据库二进制文件轮播图片显示系统时间滑动解锁禁用键盘添加托盘图标开…

GaussDB技术解读高性能——分布式优化器

GaussDB技术解读高性能——分布式优化器 分布式数据库场景下表分布在各个节点上,数据的本地性Data Locality是分布式优化器中生成执行计划时重点考虑的因素,基于Share Nothing的分布式数据库中有一个很关键概念就是“移动数据不如移动计算”,之所以有数据本地性就是因为数据…

15隐藏元素-文本溢出-盒子模型的四个部分

一、元素隐藏方法 在HTML开发过程当中存在一些元素我们想要将一些元素隐藏起来,元素如果想要隐藏有哪些方式: (1)将display设置为none页面上不显示,但是HTML仍然存在 并且也不占据位置和空间了,后面的元素就会跑上来。 (2)visibility设置为hidden visibility这个单词是…

manim边学边做--突出显示

本篇介绍Manim中用于突出显示某些内容的动画类,主要包括:ApplyWave:让图形或文字产生连续波浪式变形的动画类,用于展示波动效果,参数可调节 Circumscribe:用于在几何场景中展示图形与其外接图形的关系,动画围绕对象生成外接图形 Flash:通过快速改变对象视觉属性产生闪烁…

今天是周三?

符合题墓的标题,朴实无华[WUSTCTF2020]朴实无华 首先打开页面,发现无信息含泪扫墓路,发现robots.txt访问其中的链接,此时发现http头中藏有一个路径直接访问,得到以下代码,有一点点乱码,用抓包软件打开即可发现代码分为三关,我们一关一关看 第一关:intval绕过 //level …

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)

1.简介 上一篇主要是讲解我们日常工作中在使用Playwright进行元素定位的一些比较常用的基础定位方式的理论基础知识以及在什么情况下推荐使用。今天这一篇讲解和分享一下剩下部分的基础定位方式。 2.过滤器定位 例如以下 DOM 结构,我们要在其中单击第二个产品卡的购买按钮。我…

实景三维赋能智慧城市时空基础设施建设

随着信息技术的飞速发展,智慧城市建设已成为全球城市发展的新趋势。实景三维技术作为智慧城市建设的重要支撑,对于构建时空基础设施具有不可替代的作用。本文将探讨实景三维技术如何为智慧城市的时空基础设施建设提供强大动力。一、智慧城市时空基础设施的挑战智慧城市的时空…

没有域名如何申请SSL证书

SSL证书一般多应用于域名上,可以保证网站里面的数据不会被泄露,加强网站安全,也加强浏览者的信任度。但是有一种特殊的情况,在网站没有域名或者域名还没有准备好的时候,只有IP地址,能否安装SSL证书呢,答案是可以的,本文将介绍IP SSL证书的应用场景和申请方式。 IP SSL证…

《DNK210使用指南 -CanMV版 V1.0》第四十四章 人脸68关键点检测实验

第四十四章 人脸68关键点检测实验 1)实验平台:正点原子DNK210开发板 2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/board…

性能优化相关总结

一、性能优化要从何入手1. 让加载更快2. 让渲染更快下面看一下这两方面分别要怎么优化 二、加载方面的优化想要页面加载更快,需要从资源体积、访问次数、网络入手1、减少资源体积压缩代码       2、减少访问次数资源合并多个js文件合并 多个css文件合并 多个小图标合并…