我是靠谱客的博主 懵懂老师,最近开发中收集的这篇文章主要介绍【生成树计数】【矩阵树】【模板】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述




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_back

typedef 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("%lldn",gauss());
	}
}


最后

以上就是懵懂老师为你收集整理的【生成树计数】【矩阵树】【模板】的全部内容,希望文章能够帮你解决【生成树计数】【矩阵树】【模板】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部