BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼

邻接矩阵求路线数

特殊性在于周期,不过求下LCM还是可以搞的。

可以发现图是周期变化的,以12为一周期,于是建13个邻接矩阵,第13个为前12个的乘积,于是有G(K)=(G(13))^(k/12)*(G(1)*G(2)*……*G(k%12)),O(n^3*logk)

话说没注意邻接矩阵的含义WA了一次是闹哪样。。。。。

#include
#include
#include
using namespace std;
typedef long long ll;
const int N=50+5;
const int p=1e4;
int n;
struct matrix{
	ll a[N][N];
	matrix(){memset(a,0,sizeof(a));}
	void clear(){memset(a,0,sizeof(a));}
	matrix operator * (const matrix &b)const{
		static matrix ans;
		ans.clear();
		for(int i=0;i>=1,b=b*b)if(k&1)ans=ans*b;
		return ans;
	}
}g[13];
bool can[13][N];
int u[N*N],v[N*N],pi[10];
int main(){
	//freopen("a.in","r",stdin);
	int m,s,t,k;
	scanf("%d%d%d%d%d",&n,&m,&s,&t,&k);
	for(int i=1;i<=m;i++)
	scanf("%d%d",&u[i],&v[i]);
	int nfish;
	scanf("%d",&nfish);
	while(nfish--){
		int T;scanf("%d",&T);
		for(int i=0;i


你可能感兴趣的:(矩阵快速幂)