[BZOJ4031][HEOI2015]小Z的房间(矩阵树定理+高斯消元)

利用高斯消元法求行列式的值 本程序是利用高斯列主元消去法求取行列式的值 立即下载

=== ===

这里放传送门

=== ===

题解

没错这就是个裸题

矩阵树定理: 定义一个图的基尔霍夫矩阵为:

A[i][j]=⎧⎩⎨d[i],−1,i=ji≠j
其中 d[i] 表示点 i 的度。 对于无向图来说,这个矩阵的任何一个n-1阶主子式的行列式的值就是这个图的不同生成树个数。
其中n-1阶主子式表示在矩阵中任意去掉标号相同的一行和一列以后剩下的子矩阵

但是这题模数实在是太 ! 恶 ! 心 ! 了!!!
ATP尝试了N多种方法包括什么最小公倍数乱搞。。
最后还是上网扒出了这种类似辗转相除的方法。。
原理在ATP写高斯消元的板子里有详细的解释[戳这里],ATP就懒得再打一遍了。。

代码

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const double eps=1e-8;
const long long Mod=1e9;
int n,m,mp[20][20],d[4][2]={{0,1},{1,0},{-1,0},{0,-1}},c[20][20],cnt;
long long ans,A[110][110],mak;
long long Abs(long long x){return (x<0)?-x:x;}
long long gcd(long long a,long long b){
    long long r=a%b;
    while (r!=0){a=b;b=r;r=a%b;}
    return b;
}
long long get_LCM(long long a,long long b){
    return (a/gcd(a,b)*b);
}
void addedge(int x,int y){
    int u,v,a,b;
    a=c[x][y];
    for (int i=0;i<4;i++){
        u=x+d[i][0];v=y+d[i][1];
        if (c[u][v]!=0){
            b=c[u][v];A[a][a]++;A[a][b]=-1;
        }
    }
}
/*void Gauss_Eli(int n){
    int num;
    for (int i=1;i<=n;i++){
        num=i;
        for (int j=i+1;j<=n;j++)
          if (Abs(A[j][i])>Abs(A[num][i])) num=j;
        for (int j=1;j<=n;j++) swap(A[i][j],A[num][j]);
        for (int j=i+1;j<=n;j++)
          if (A[j][i]!=0){
              long long lcm=get_LCM(A[i][i],A[j][i]),ta,tb;
              ta=lcm/Abs(A[j][i]);tb=lcm/Abs(A[i][i]);
              if (A[j][i]*A[i][i]<0) tb=-tb;
              for (int k=1;k<=n;k++)
                A[j][k]=(ta*A[j][k]-tb*A[i][k])%Mod;
          }
    }
}*/
void Gauss_Eli(int n){
    int num;
    for (int i=1;i<=n;i++){
        num=i;
        for (int j=i+1;j<=n;j++)
          if (Abs(A[j][i])>Abs(A[num][i])) num=j;
        if (num!=i) mak^=1;
        for (int j=1;j<=n;j++) swap(A[i][j],A[num][j]);
        for (int j=i+1;j<=n;j++)
          while (A[j][i]!=0){
              long long tmp=A[j][i]/A[i][i];
              for (int k=1;k<=n;k++)//做完一次操作以后A[j][i]相当于对A[i][i]取模了
                A[j][k]=(A[j][k]+Mod-tmp*A[i][k]%Mod)%Mod;
              if (A[j][i]==0) break;
              mak^=1;//注意要维护取反标记,不能直接取绝对值
              for (int k=1;k<=n;k++) swap(A[j][k],A[i][k]);
          }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
      for (int j=1;j<=m;j++){
          char s=getchar();
          while (s!='.'&&s!='*') s=getchar();
          if (s=='*') mp[i][j]=1;
          else c[i][j]=++cnt;
      }
    for (int i=1;i<=n;i++)
      for (int j=1;j<=m;j++)
        if (mp[i][j]!=1) addedge(i,j);
    Gauss_Eli(cnt-1);ans=1;
    for (int i=1;i<cnt;i++)
      ans=(ans*A[i][i])%Mod;
    if (mak==1) ans=Mod-ans;//因为是取模运算所以一定要注意正负
    ans=(ans+Mod)%Mod;
    printf("%I64d\n",ans);
    return 0;
}
CentOS7.9 安装 ImageMagick,图片转换为HEIC图像格式 由于ImageMagick7以下不支持heic等图片格式,所以重新安装了ImageMagick7.1版本支持heic格式,在网上找了很多资料,归纳总结并写此文章记录一下。在Linux(CentOS7.9)上安装ImageMagick7.1.1-38。 阅读详情

相关推荐

为什么需要知识图谱?什么是知识图谱?——KG的前世今生

我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术

SimmerChan的专栏 8万+

高斯消元辗转相除法O(n^3)的复杂度分析

高斯消元辗转相除法的复杂度分析 高斯消元在模意义下时有一种流传甚广的写法——辗转相除法,复杂度也是 O(n3)O(n^3)O(n3) ,但是码量小,十分好写。 具体操作是枚举第 iii 个未知数,将除第 iii 个方程以外的其他方程的该未知数的系数用辗转相除的方式消为 000 。 考虑干这样一件事,将 nnn 个数同 aaa 辗转相除,并将它们全部消为 000 。现在正在用 bib_ibi​ 和 aaa 相除。 ①当 bi>ab_i>abi​>a ,进行一次操作后 bi<ab_i&l

m0_51483033的博客 1065

国产操作系统应用迁移与适配

了解国产操作系统的背景及意义

2301_77609559的博客 2680

【HEOI2015】【BZOJ4031】小Z的房间

Description你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路

CreationAugust is 14 years old forever 1091

人形机器人人机交互解决方案(2026完整版)

《人形机器人人机交互解决方案(2026完整版)》摘要 本项目针对2026年人形机器人产业爆发式增长需求,提出了一套完整的人机交互解决方案。方案包含十大核心模块(语音识别、情感识别、手势识别等),采用五层架构设计,实现多模态融合交互,响应时间≤32ms,准确率≥99%。覆盖制造业巡检、家庭服务等10大场景,适配20+主流机型。项目总投资4.1亿元,预期年营收8.2亿元,将申请专利120项,培养专业人才300人。通过技术创新解决当前交互体验生硬、安全可控性不足等痛点,助力我国人形机器人产业实现从"跟跑

随读手记 776

C++ 工程实践(9):数据抽象

陈硕 (giantchen_AT_gmail)http://blog.youkuaiyun.com/Solstice  http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.youkuaiyun.com/Solstice/category/8

陈硕的Blog 1万+

bzoj 4031: [HEOI2015]小Z的房间 (矩阵树定理+高斯消元)

4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 932  Solved: 454 [Submit][Status][Discuss] Description 你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。

clover_hxy的博客 546

17track单号查询逆向分析

这就说明该网站很有可能存在其它检测点,而检测本地替换最大可能的就是检测了代码格式化或者代码长度。也一样,要么导致网站卡死,要么会导致网页加载异常,这里可能就难到不少人了,让我们一步一步解决。而这个站主要是检测了代码格式化,无限循环检测造成了网站卡死,经多次测试发现检测点共三处。方法中代码很长,但是经调试后发现,它其实只返回一个固定的值,这里直接写死即可。同样的,虽然看起来很长,但是跟过之后就会发现流程很简单,这里主要就是对。追加了一些值,是一条很长的语句,整理代码。,核心流程也很简单,稍微跟一下就出来了,

pyzzd的博客 1624

[HEOI2015]小 Z 的房间(矩阵树定理,高斯消元+辗转相除)

题意: 数据范围:n,m<=9 解法: 矩阵树定理模板题 这题答案需要模1e9,而高斯消元的过程中有除法, 因此本题需要用辗转相除法(欧几里得算法),复杂度多一个log code: #include<bits/stdc++.h> using namespace std; #define int long long const int maxm=15; const int mod=1e9; char s[maxm][maxm]; int id[maxm][maxm],idx; int n,

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 250

YOLOV12融合MSDA多尺度空洞注意力:突破尺度限制的科研实践指南

MSDA通过多尺度空洞注意力的设计,为YOLOV12突破尺度检测瓶颈提供了有效方案。从原理理解到代码实现,再到集成调优,每一步都是科研中“解决实际问题”的具体实践。如果你在实验中发现某类尺度目标的检测仍有不足,可以尝试结合数据增强(如随机缩放、多尺度训练)来强化模型对尺度变化的鲁棒性。科研的价值在于不断解决真实难题,希望这份指南能真正帮你在目标检测的尺度感知领域找到新的突破点,祝你在科研探索中持续收获新的见解与成果。

FJN110的博客 243

芯片测试:WAT、CP、FT

最近部门来了一个日本回来的同事,虽然他尽量用非常Poor的中文给我解释一些东西,其中还夹杂着一些英文让我很受挫,于是最近来学一下WAT中的常用的单词含义。直接去查缩写、查单词很难去记住,要把具体的东西放在具体的场景,引发知识的连接才会在脑子里留下一定的映像。感兴趣的一起来学习一下这篇不错的文章吧。注释是我查询记录,如有不妥,欢迎指出修正。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5089

小Z的房间(矩阵树定理)

题目描述 你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n×m 个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路。现在,你希望统计一共有多少种可行的方案,答案对 109取模。 输入格式 第一行两个整数 n,m。 接下来 n 行,每行

qq_46000584的博客 351

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

[bzoj4031][HEOI2015]小Z的房间【矩阵树定理】【高斯消元】

【题目描述】 Description 你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。 你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望...

dizhengyue1902的博客 205

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

BZOJ4031 [HEOI2015]小Z的房间 【矩阵树定理 + 高斯消元】

题目链接 BZOJ4031 题解 第一眼:这不裸的矩阵树定理么 第二眼:这个模\(10^9\)是什么鬼嘛QAQ 想尝试递归求行列式,发现这是\(O(n!)\)的。。 想上高斯消元,却又处理不了逆元这个东西、、 无奈去翻题解,,, 发现可以用类似辗转相除法去消,而避免除法,,, 这样子依旧是每次一行减去另一行乘一个数,行列式不变 orz #include<algorithm> ...

weixin_30752699的博客 79

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

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

【bzoj4031】[HEOI2015]小Z的房间 解题报告

【bzoj4031】[HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含\(n*m\)个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。 你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房...

weixin_30265171的博客 95

BZOJ4031: [HEOI2015]小Z的房间【矩阵树定理】

4031: [HEOI2015]小Z的房间 裸的矩阵树定理。 #include<cstdio> #include<algorithm> using namespace std; const int MOD=1e9; int n,m,cnt,Ans,mp[105][105],a[105][105];char ch[15]; void Add(int x,int y){a[x]...

XSamsara的博客 AFO 179

BZOJ4031: [HEOI2015]小Z的房间

BZOJ4031: [HEOI2015]小Z的房间 https://lydsy.com/JudgeOnline/problem.php?id=4031 分析: 矩阵树定理模板题。 模数非质数,可能不存在逆元,需要用辗转相除的方法把对应项消成\(0\)。 代码: #include <cstdio> #include <cstring> #include <...

122

【bzoj4031】 HEOI2015小Z的房间 矩阵树定理

第一次做矩阵树定理的题,其实就是记了个结论也没太看证明,然后学了学怎么用高斯消元求行列式,整数消元还真别扭,要用辗转相除,然后要注意取模的问题,一开始以为hzwer写麻烦了,后来想了想不加外面那句话会有问题,因为取模了。 #include #include #include #include #include #include #define mod 1000000000 using

Oxer的专栏 1236

bzoj4031 [HEOI2015]小Z的房间——矩阵树定理

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4031 矩阵树定理的模板题(第一次的矩阵树定理~); 有点细节,放在注释里了。 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace...

aodan5477的博客 195

Bzoj4031 [HEOI2015]小Z的房间

Time Limit:10 SecMemory Limit:256 MBSubmit:1041Solved:504 Description 你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。 你想要打通一些相邻房间的墙,使得所有房间能够互...

dezhen7015的博客 139

[BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间

[BZOJ 4031][LOJ 2122][HEOI 2015] 小Z的房间 题意 给定一个 \(n\times m\) 的矩阵, 一些格子是障碍, 相邻的格子(四联通)之间可以连边, 求把非障碍的格子连成一棵树的方案数量 \(\bmod 10^9\) 的值. \(n,m\le 9\). 题解 一些奇怪的东西 做题过程: 这个数据范围怎么这么像大力状压啊 怎么还要联通性啊不会是插头DP...

weixin_30585437的博客 93

bzoj4031[HEOI2015]小Z的房间(矩阵树定理)

Description 你突然有了一个大房子,房子里面有一些房间。事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。 你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有...

a1035719430的博客 286

BZOJ4031 [HEOI2015]小Z的房间

传送门 题解: 因为持续写题感到恶心又不想显得太颓于是随便存几个板子 求生成树方案数? 矩阵树定理板子题。 这就当我存个板子的地方吧。 总之就是对于边(i,j),矩阵a[i][j]值-1,a[i][i]值+1。然后求个行列式即可。 代码: #include<cstdio> #include<algorithm> #define maxn 105 #define mod 10...

dogeding233 226

BZOJ 4031: [HEOI2015]小Z的房间 矩阵树定理

这里的模数不是质数,所以需要用类似辗转相除的方式进行高斯消元. code: #include <cstdio> #include <algorithm> #define N 100 #define ll long long #define mod 1000000000 #define setIO(s) freopen(s".in"...

EM LGH 172
上一篇: [Codeforces487E]Tourists(Tarjan+树链剖分+STL)
下一篇: [BZOJ2565]最长双回文串(manacher)
FromATP
博客等级 码龄10年 75粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值