「UVA10766」Organising the Organisation(生成树计数)
BUPT 2017 Summer Training (for 16) #6C
题意
n个点,完全图减去m条边,求生成树个数。
题解
注意可能会给重边。
然后就是生成树计数了。
代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 101
#define eps (1e-8)
#define mem(x,v) memset(x,v,sizeof(x))
typedef long long ll;
using namespace std;
int n,m,k;
ll g[N][N];
int sgn(double x){
return x>eps?1:(x<-eps?-1:0);
}
ll det(int n){
int i,j,k;
ll ans=1,t;
for(i=0;i<n;++i){
for(j=i+1;j<n;++j)
while(g[j][i]){
t=g[i][i]/g[j][i];
for(k=i;k<n;++k)
g[i][k]-=g[j][k]*t;
swap(g[i],g[j]);
ans=-ans;
}
if(g[i][i]==0)return 0L;
ans=ans*g[i][i];
}
return ans;
}
int main(){
while(~scanf("%d%d%d",&n,&m,&k)){
mem(g,-1);
for(int i=0;i<n;++i)
g[i][i]=0;
for(int i=0;i<m;++i){
int u,v;
scanf("%d%d",&u,&v);
--u;--v;//!!!
g[u][v]=g[v][u]=0;
}
for(int i=0;i<n;++i)
for(int j=i+1;j<n;++j){
if(g[i][j]){
++g[i][i];
++g[j][j];
}
}
printf("%lld\n",det(n-1));
}
return 0;
}
┆凉┆暖┆降┆等┆幸┆我┆我┆里┆将┆ ┆可┆有┆谦┆戮┆那┆ ┆大┆始┆ ┆然┆
┆薄┆一┆临┆你┆的┆还┆没┆ ┆来┆ ┆是┆来┆逊┆没┆些┆ ┆雁┆终┆ ┆而┆
┆ ┆暖┆ ┆如┆地┆站┆有┆ ┆也┆ ┆我┆ ┆的┆有┆精┆ ┆也┆没┆ ┆你┆
┆ ┆这┆ ┆试┆方┆在┆逃┆ ┆会┆ ┆在┆ ┆清┆来┆准┆ ┆没┆有┆ ┆没┆
┆ ┆生┆ ┆探┆ ┆最┆避┆ ┆在┆ ┆这┆ ┆晨┆ ┆的┆ ┆有┆来┆ ┆有┆
┆ ┆之┆ ┆般┆ ┆不┆ ┆ ┆这┆ ┆里┆ ┆没┆ ┆杀┆ ┆来┆ ┆ ┆来┆