【生成树计数】【矩阵树】【模板】

来源:互联网 发布:microsoft软件有哪些 编辑:程序博客网 时间:2024/06/16 09:58




uva10766

#include <iostream>#include <cstring>#include <cmath>#include <queue>#include <stack>#include <list>#include <map>#include <set>#include <string>#include <cstdlib>#include <cstdio>#include <algorithm>using namespace std;#define rep(i,a,n) for (int i=a;i<n;i++)#define per(i,a,n) for (int i=n-1;i>=a;i--)#define mp push_backtypedef long long  ll;int n,m,k;int conn[65][65];ll g[65][65];ll gauss(){ll ret = 1;for(int i=1;i<n;i++){for(int j=i+1;j<n;j++){while(g[j][i] != 0){ll tt = g[i][i] / g[j][i];for(int k=i;k<n;k++){g[i][k] = g[i][k] -  tt * g[j][k];}for(int k=i;k<n;k++){swap(g[i][k],g[j][k]);}ret = -ret;}}if(g[i][i] == 0) return 0;ret = ret * g[i][i];}if(ret < 0) return -ret;return ret;}int main(){//freopen("in.txt","r",stdin);    while(~scanf("%d%d%d",&n,&m,&k))  {memset(conn,0,sizeof(conn));for(int i=0;i<m;i++){int u,v;scanf("%d%d",&u,&v);u --;v --;conn[u][v] = 1;conn[v][u] = 1;}memset(g,0,sizeof(g));for(int i=0;i<n;i++){int degree = 0;for(int j=0;j<n;j++){if(i!=j && !conn[i][j]){degree ++;g[i][j] = -1;}}g[i][i] = degree;}printf("%lld\n",gauss());}}


0 0
原创粉丝点击