题目:P5789
代码(C#)
样例都没过(输出 7)
namespace Program {
public class Program {
internal const int MOD = 2017;
public static void Main() {
string[] res1 = ReadLine().Split(' ');
int n = int.Parse(res1[0]);
int m = int.Parse(res1[1]);
Matrix matrix = new();
matrix.N = n;
matrix.M = m;
for (int i = 0; i <= n; i++) {
matrix[i, i] = matrix[i, 0] = 1;
}
for (int i = 1; i <= m; i++) {
string[] res2 = ReadLine().Split(' ');
int u = int.Parse(res2[0]);
int v = int.Parse(res2[1]);
matrix[u, v] = matrix[v, u] = 1;
}
int t = int.Parse(ReadLine());
matrix = Matrix.QuikPow(matrix, t);
int ans = 0;
for (int i = 0; i <= n; i++) {
ans = (ans + matrix[1, i]) % MOD;
}
Console.WriteLine(ans);
}
public static string ReadLine() {
return Console.ReadLine() ?? "";
}
}
class Matrix {
private const int MAXN = 105;
private int[,] data = new int[MAXN, MAXN];
private int n = 0;
private int m = 0;
public int N {
get { return n; }
set { n = value; }
}
public int M {
get { return m; }
set { m = value; }
}
public int this[int x, int y] {
get { return data[x, y]; }
set { data[x, y] = value; }
}
public void Clear() {
n = m = 0;
Array.Clear(data);
}
public static Matrix operator*(Matrix a, Matrix b) {
Matrix res = new();
res.Clear();
res.n = a.n;
res.m = b.m;
for (int i = 0; i <= a.n; i++) {
for (int j = 0; j <= a.m; j++) {
for (int k = 0; k <= b.m; k++) {
res[i, k] = (res[i, k] + a[i, j] * b[j, k]) % Program.MOD;
}
}
}
return res;
}
public static Matrix QuikPow(Matrix baseMatrix, int powerNum) {
Matrix res;
if (powerNum == 1) {
return baseMatrix;
} else if (powerNum % 2 == 1) {
Matrix temp = QuikPow(baseMatrix, powerNum / 2);
res = temp * temp * baseMatrix;
} else {
Matrix temp = QuikPow(baseMatrix, powerNum / 2);
res = temp * temp;
}
return res;
}
}
}
还有,我的本地是用最高版的 C# 和 .NET7,不要说我漏了 using System;