在网格中取一个N x 1的矩形,并把它当作一个无向图。这个图有2(N+1)个顶点,有3(N-1)+4条边。这个图有多少个生成树?
#include<iostream> using namespace std; const int INF = 1000000000; const int M = 12345; const int D = 1000; long long f[D+1][2]; void init() { f[1][0] = 3; f[1][1] = 1; for(int i=2;i<=D;++i) { f[i][0] = 3*f[i-1][0]+2*f[i-1][1]; f[i][1] = f[i-1][0]+f[i-1][1]; if(f[i][0]>INF) f[i][0] %= M; if(f[i][1]>INF) f[i][1] %= M; } } int main() { int n; init(); while(cin>>n) { if(n==0) cout<<0<<endl; else cout<<(f[n][0]+f[n][1])%M<<endl; } return 0; }