1 条题解
-
0
#include <cmath> #include <cstdio> #include <cstring> #include <algorithm> inline int read() { char c = getchar(); int x = 0; while (c < '0' || c > '9') { c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 1) + (x << 3) + (c & 15); c = getchar(); } return x; } const int maxN = 100005, maxR = 12; int n, m, p, f[3][maxN], g[3][maxR][maxN]; struct List { int len, fst[maxN], nxt[maxN << 1], to[maxN << 1]; List() { memset(fst, -1, sizeof(fst)); } inline void insert(int u, int v) { nxt[len] = fst[u]; to[len] = v; fst[u] = len++; } inline void link(int u, int v) { insert(u, v); insert(v, u); } } e; inline int add(int x, int y) { x += y; return x >= p ? x - p : x; } inline int mul(int x, int y) { return (long long) x * y % p; } void dfs1(int u, int fa) { f[0][u] = 1; f[1][u] = f[2][u] = 1e9; for (int i = e.fst[u], v; ~i; i = e.nxt[i]) { v = e.to[i]; if (v == fa) { continue; } dfs1(v, u); f[2][u] = std::min(std::max(f[2][u], f[2][v] + 1), std::max(f[1][u], f[1][v])); f[1][u] = std::min(std::max(f[1][u], f[2][v] + 1), std::max(f[0][u], f[1][v])); f[0][u] = std::max(f[0][u], f[2][v] + 1); } f[1][u] = std::min(f[0][u], f[1][u]); f[2][u] = std::min(f[1][u], f[2][u]); } void dfs2(int u, int fa) { for (int i = 1; i <= f[2][1]; i++) { g[0][i][u] = 1; } for (int i = e.fst[u], v; ~i; i = e.nxt[i]) { v = e.to[i]; if (v == fa) { continue; } dfs2(v, u); for (int i = 1; i <= f[2][1]; i++) { g[2][i][u] = add(mul(g[2][i][u], g[2][i - 1][v]), mul(g[1][i][u], g[1][i][v])); g[1][i][u] = add(mul(g[1][i][u], g[2][i - 1][v]), mul(g[0][i][u], g[1][i][v])); g[0][i][u] = mul(g[0][i][u], g[2][i - 1][v]); } } for (int i = 1; i <= f[2][1]; i++) { g[1][i][u] = add(g[0][i][u], g[1][i][u]); g[2][i][u] = add(g[1][i][u], g[2][i][u]); } } int main() { n = read(); m = read(); p = read(); if (m != n - 1) { printf("-1\n-1\n"); return 0; } for (int i = 1; i <= m; i++) { e.link(read(), read()); } dfs1(1, 0); dfs2(1, 0); printf("%d\n%d\n", f[2][1] - 1, g[2][f[2][1]][1]); return 0; }
- 1
信息
- ID
- 1063
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 11
- 已通过
- 4
- 上传者