生成树计数(和MOD取模)
来源:互联网 发布:js treeview drag区域 编辑:程序博客网 时间:2024/06/07 19:56
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int MOD = 10007;int INV[MOD];//求ax = 1( mod m) 的x值,就是逆元(0<a<m)long long inv(long long a,long long m) { if(a == 1)return 1; return inv(m%a,m)*(m-m/a)%m;}struct Matrix { int mat[330][330]; void init() { memset(mat,0,sizeof(mat)); } void addEdge(int u,int v) { mat[u][v]=-1; mat[u][u]++; } int det(int n) { //求行列式的值模上MOD,需要使用逆元 for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) mat[i][j] = (mat[i][j]%MOD+MOD)%MOD; int res = 1; for(int i = 0; i < n; i++) { for(int j = i; j < n; j++) if(mat[j][i]!=0) { for(int k = i; k < n; k++) swap(mat[i][k],mat[j][k]); if(i != j) res = (-res+MOD)%MOD; break; } if(mat[i][i] == 0) { res = -1;//不存在(也就是行列式值为0) break; } for(int j = i+1; j < n; j++) { //int mut = (mat[j][i]*INV[mat[i][i]])%MOD;//打表逆元 int mut = (mat[j][i]*inv(mat[i][i],MOD))%MOD; for(int k = i; k < n; k++) mat[j][k] = (mat[j][k]-(mat[i][k]*mut)%MOD+MOD)%MOD; } res = (res * mat[i][i])%MOD; } return res; }};Matrix ret;int main() { int t; cin>>t; while(t--) { int n,m; scanf("%d%d",&n,&m); ret.init(); for(int i=0;i<m;i++){ int u,v; scanf("%d%d",&u,&v); ret.addEdge(u,v); ret.addEdge(v,u); } printf("%d\n",ret.det(n-1)); } return 0;}
0 0
- 生成树计数(和MOD取模)
- hdu 4305 Lightning(生成树计数 取模)
- 取模mod
- 生成树计数(草稿)
- matlab 取模(mod)与取余(rem)的区别
- 取模(mod)与取余(rem)的区别——Matlab学习笔记
- 取模(mod)与取余(rem)的区别
- 取模(mod)与取余(rem)的区别——Matlab学习笔记
- 取模(mod)与取余(rem)的区别
- 取模MOD和求余REM……JAVA的%原来只是REM
- 取模运算(mod)和求余(rem)运算不能被混为一谈
- 取模MOD和求余REM……JAVA的%原来只是REM
- 取模(mod)与取余(rem)的区别
- 生成树计数(Matrix-Tree定理)
- spoj104 Highways(生成树计数模板)
- URAL 1627 Join(生成树计数)
- SPOJ Highways(生成树计数)
- 生成树计数
- ubuntu安装flash插件
- JavaScript总结
- Android中的5种数据存储方式之——SQLite
- android wifi信号检测
- VS2015 使用RDLC报表
- 生成树计数(和MOD取模)
- DirectX11 Alpha通道
- 寻人启事网-寻人档案-推荐
- 三种工厂模式的C++实现
- STM32f103焊接系列的温度
- symfony权威指南(4、1)之动作
- 一个粗糙的首页……
- 用顺序栈解决将读入的数按相反的方向解决
- 将多边形点按照逆时针排序