ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

矩阵树定理 学习笔记

2021-01-19 18:03:42  阅读:241  来源: 互联网

标签:mo fu int 矩阵 定理 edn 笔记 rd rep


include<bits/stdc++.h>

define rep(i,x,y) for(int i=x;i<=y;++i)

define per(i,x,y) for(int i=x;i>=y;--i)

define lon long long

using namespace std;
const int n7=303;const lon mo=1000000007;
int n,m,sys;lon a[n7][n7],ans=1;

void edge(int sta,int edn,int w){
a[edn][edn]=(a[edn][edn]+w)%mo,a[edn][sta]=(a[edn][sta]-w+mo)%mo;
}

int rd(){
int shu=0;char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))shu=(shu<<1)+(shu<<3)+ch-'0',ch=getchar();
return shu;
}

void Dswap(int N,int p,int q){
rep(i,1,N)swap(a[p][i],a[q][i]);
}

void deter(int N){
bool fu=0;
rep(i,1,N){
int wei=i;bool flag=0;
rep(j,i,N){
if(a[j][i]&&!flag)flag=1;
if(a[j][i]&&a[j][i]<a[wei][i])wei=j;
}
if(!flag){ans=0;return;}
if(i!=wei)Dswap(N,i,wei),fu=1-fu;
rep(j,i+1,N){
if(a[j][i]>a[i][i]){Dswap(N,i,j);fu=1-fu;}
while(a[j][i]){
lon tmp=a[i][i]/a[j][i];
rep(k,i,N)a[i][k]=(a[i][k]+(mo-tmp)a[j][k])%mo;
Dswap(N,i,j);
fu=1-fu;
}
}
ans=ans
a[i][i]%mo;
}
if(fu)ans=(-ans+mo)%mo;
}

int main(){
n=rd(),m=rd(),sys=rd();
rep(i,1,m){
int sta=rd(),edn=rd(),w=rd();
if(sta==edn)continue;
edge(sta,edn,w);
if(!sys)edge(edn,sta,w);
}
rep(i,1,n)rep(j,1,n)a[i][j]=a[i+1][j+1];
deter(n-1);
printf("%lld",ans);
return 0;
}

标签:mo,fu,int,矩阵,定理,edn,笔记,rd,rep
来源: https://www.cnblogs.com/BlankAo/p/14299230.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有