题意:
有n个点,给你邻接矩阵表示第i中第j列这两个点i与j是否可以直接相连,a[i][j]=1表示可以直接相连。前提是你必须使用了n-1条边,如果用不完或者不够都是不能满足题意的,
所以输出0。现在问你对于给定的一组关系,满足题意的连接方案数。
AC code
#include<bits/stdc++.h>
#define mod 1000000007
#define Maxn 507
using namespace std;
int n,a[Maxn][Maxn],d[Maxn][Maxn],f[Maxn][Maxn];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
for (int j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(int i=0;i<n;i++)
d[i][i]=1,f[i][i]=1;
for(int len=2;len<=n;len++)
{
for(int i=0;i<n;i++)
{
int j=(i+len-1)%n;
for(int k=i;k!=j;k=(k+1)%n)
{
if(a[i][j])
d[i][j]=(d[i][j]+1LL*f[i][k]*f[(k+1)%n][j])%mod;
f[i][j]=(f[i][j]+1LL*d[i][(k+1)%n]*f[(k+1)%n][j])%mod;
}
}
}
printf("%d\n",f[0][n-1]);
return 0;
}