BZOJ5297: [Cqoi2018]社交網路
阿新 • • 發佈:2019-01-06
BZOJ5297: [Cqoi2018]社交網路
https://lydsy.com/JudgeOnline/problem.php?id=5297
分析:
- 求外向生成樹個數。
- 矩陣樹定理模板題。
程式碼:
#include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> #include <cmath> using namespace std; #define mod 10007 #define N 280 int n,m,a[N][N]; int qp(int x,int y) { int re=1; for(;y;y>>=1,x=x*x%mod) if(y&1) re=re*x%mod; return re; } int Gauss(int n) { int i,j,k,ans=1,flg=0,del; for(i=1;i<=n;i++) { for(j=i;j<=n&&!a[j][i];j++) ; if(j>n) continue; if(i!=j) { for(k=i;k<=n;k++) swap(a[i][k],a[j][k]); flg^=1; } for(j=i+1;j<=n;j++) { del=a[j][i]*qp(a[i][i],mod-2)%mod; for(k=i;k<=n;k++) a[j][k]=(a[j][k]-del*a[i][k])%mod; } } for(i=1;i<=n;i++) ans=ans*a[i][i]%mod; if(flg) ans=-ans; return (ans+mod)%mod; } int main() { scanf("%d%d",&n,&m); int i,x,y; for(i=1;i<=m;i++) { scanf("%d%d",&x,&y); x--; y--; a[x][x]++; a[y][x]--; } printf("%d\n",Gauss(n-1)); }