題意:
有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;
}