悬1关求助!样例过不去!
查看原帖
悬1关求助!样例过不去!
804607
rainygame楼主2023/4/15 00:08
#include <bits/stdc++.h>
using namespace std;
#define MOD 2017

int n, m, u, v, t, ans;
int A[31][31], C[31][31], E[31][31];

void mul(int A[31][31], int B[31][31]){
	memset(C, 0, sizeof(C));
	
	for (int i=0; i<=n; i++){
		for (int j=0; j<=n; j++){
			for (int k=0; k<=n; k++) C[i][j] = (C[i][j] + (A[i][k] * B[k][j]) % MOD) % MOD;
		}
	}
	
	memcpy(A, C, sizeof(C));
}

void qpow(int A[31][31], int k){
	memset(E, 0, sizeof(E));
	for (int i=1; i<=30; i++) E[i][i] = 1;
	
	while (k){
		if (k & 1) mul(E, A);
		mul(A, A);
		k >>= 1;
	}
	
	memcpy(A, E, sizeof(E));
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n >> m;
	for (int i=1; i<=m; i++){
		cin >> u >> v;
		A[u][v] = A[v][u] = 1;
	}
	for (int i=0; i<=n; i++) A[i][i] = A[0][i] = 1;
	
	for (int i=0; i<=n; i++){
		for (int j=0; j<=n; j++){
			cout << A[i][j] << ' ';
		}
		cout << '\n';
	}
	
	cin >> t;
	qpow(A, t);
	for (int i=0; i<=n; i++) ans = (ans + A[1][i]) % MOD;
	
	cout << ans;
	
	return 0;
}

2023/4/15 00:08
加载中...