sro_ptx_orz

qwq算是一个套路的记录

对于一个有向图来说

如果你要求一个外向生成树的话,那么如果存在一个\(u\rightarrow v\)的边
那么\(a[u][v]--,a[v][v]++\)

对应的去掉第\(i\)行和第\(i\)列的余子式,就是以\(i\)为根的生成树个数。

内向生成树也是同理。所有的反过来即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<set>
#define mk make_pair
#define ll long long
//#define int long long
#define rint register int
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while (!isdigit(ch)) {if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;
}
const int maxn = 310;
const int mod = 10007;
int qsm(int i,int j)
{int ans=1;while (j){if (j&1) ans=ans*i%mod;i=i*i%mod;j>>=1;}return ans;
}
int a[maxn][maxn];
int n,m;
int d[maxn][maxn];
int b[maxn][maxn];
void gauss()
{int k=1;int ff=1;int ans=1;for (rint i=1;i<=n;++i){int now = k;while (now<=n && !(a[now][i])) ++now;if (now==n+1) continue;if (now!=k) ff*=-1;for (rint j=1;j<=n;++j) swap(a[now][j],a[k][j]);int inv = qsm(a[k][i],mod-2);for (rint j=i+1;j<=n;++j){int t = a[j][i]*inv%mod;for (rint p=1;p<=n;++p) a[j][p]=(a[j][p]-a[k][p]*t%mod+mod)%mod;}++k;}for (rint i=1;i<=n;++i) ans=ans*a[i][i]%mod;if(ff==-1) cout<<mod-ans;else cout<<ans;
}
signed main()
{n=read(),m=read();for (rint i=1;i<=m;++i){int x=read(),y=read();a[x][x]++;a[y][x]--;}for (rint i=1;i<=n;++i)for (rint j=1;j<=n;++j) b[i][j]=a[i][j];for (rint i=1;i<n;++i)for (rint j=1;j<n;++j){a[i][j]=b[i+1][j+1];}n--;gauss(); return 0;
}

转载于:https://www.cnblogs.com/yimmortal/p/10194388.html

洛谷4455 [CQOI2018]社交网络 (有向图矩阵树定理)(学习笔记)相关推荐

  1. [P4455][CQOI2018]社交网络(矩阵树定理)

    关于矩阵树定理用于有向图生成树计数: ①内向树生成树计数.  A为邻接矩阵, D为出度矩阵.  C=D−A.  以root为根的内向生成树个数为C的余子式M[root,root]的行列式.  ②外向树 ...

  2. 基尔霍夫矩阵矩阵树定理学习笔记

    背景: 好多东西没学. 勇士被快船惊天大逆转!!! 快船NBNBNB. 紧接着下午打球水杯被搞烂了......... 正题: Part1Part1Part1行列式: 对于一个n∗nn*nn∗n的矩阵A ...

  3. 洛谷 P4208 [JSOI2008]最小生成树计数 矩阵树定理

    题目描述 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的).由于不同的 ...

  4. BZOJ1112洛谷P3466 [POI2008]KLO-Building blocks(砖头)[对顶堆学习笔记]

    坑爹的BZOJ因为不让 输出方案我WA了若干次 据说正解是平衡树/线段树,我不会,就用了个新东西->对顶堆 对顶堆 一个维护中位数的东西,我们通过维护两个堆,来维所有数的中位数 (显然我们可以排 ...

  5. BZOJ1016 || 洛谷P4208 [JSOI2008]最小生成树计数【矩阵树定理】

    时空限制 1000ms / 128MB 题目描述 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则 ...

  6. 洛谷 P3373 【模板】线段树 2 题解

    洛谷 P3373 [模板]线段树 2 题解 题面 题目链接:[戳这里](https://www.luogu.org/problemnew/show/P3373) 题目描述 输入输出格式 输入输出样例 ...

  7. 信息学奥赛一本通 1365:FBI树(fbi) | 1928:【04NOIP普及组】FBI树 | 洛谷 P1087 [NOIP2004 普及组] FBI 树

    [题目链接] ybt 1365:FBI树(fbi) ybt 1928:[04NOIP普及组]FBI树 洛谷 P1087 [NOIP2004 普及组] FBI 树 [题目考点] 1. 二叉树 [解题思路 ...

  8. 【学习笔记】矩阵树定理(Matrix-Tree)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 一.矩阵树定理 二.常用定理 三.例题 1. Luogu P6178 [模板]Matrix-Tr ...

  9. 最小生成树、矩阵树定理、Prufer序列总结

    Kruskal算法 按边权排序,从小到大合并不在同一集合两点即可 Prim算法 每次加入一个到当前已选点集最近的点 P2619 [国家集训队]Tree I 考虑二分,每次给白边加上一个mid,通过这种 ...

最新文章

  1. 什么是JAVA语言为什么要学习JAVA
  2. 使用mvc2里面的area让网站更有条理
  3. python 单例模式,一个类只能生成唯一的一个实例,重写__new__方法详解
  4. fvcore CfgNode
  5. Chrome Firefox for Linux 直达下载链接
  6. CoreOS镜像更新
  7. -1岁的产品经理日记(20年秋招产品经理经历分享,含简历、笔经、面经)
  8. 运用getParameterNames()方法和getParameterValues()方法获取请求参数名称和内容
  9. CC2430基础——IAR的安装及配置
  10. eplan mysql_EPLAN 部署SQL部件库安装详解
  11. bzoj 1853: [Scoi2010]幸运数字 容斥
  12. springboot+mybatis 利用PageHelper插件分页,结果第二页的返回分页信息还是和第一页一样。
  13. 最短路径问题——Dijkstra算法详解(单源最短路径)
  14. 利用canvas实现田字格里写字,并适配移动端
  15. 2018.10.04 codeforces1060E. Sergey and Subway(树形dp)
  16. Linux之pstree命令
  17. C++ 如何加载lib
  18. pandas-组操作-拆分-应用-组合(groupby)(三)
  19. SiWave安装问题
  20. 关于Python如何表示大于等于且小于等于的方式

热门文章

  1. CVBS两种电路-记录
  2. 学习 Go 语言 1 — 基础语法
  3. 测控技术与仪器考计算机三级,测控技术与仪器专业就业方向及前景
  4. MAC安装向日葵软件 远程协助设置1
  5. 微信小程序项目实例——幸运大转盘
  6. CIE RGB、CIE XYZ、 Lab空间转换
  7. 财务分析与决策:同型分析【转】
  8. Windows批量修改服务器密码,expect批量修改linux服务器密码
  9. Java计算圆的体积,面积
  10. 基于SVM的航空发动机故障诊断系统设计