求评马蜂
  • 板块灌水区
  • 楼主zdycoding
  • 当前回复3
  • 已保存回复3
  • 发布时间2025/1/22 20:08
  • 上次更新2025/1/22 20:32:50
查看原帖
求评马蜂
1530145
zdycoding楼主2025/1/22 20:08

rt。

#include <iostream>
#define maxN 1100100
using namespace std;
const int mod = 1e9 + 7;
int head[maxN], nxt[maxN << 1], to[maxN << 1], cnt;
void addEdge(int x, int y) {
	nxt[++ cnt] = head[x];
	head[x] = cnt;
	to[cnt] = y;
}
int n, m;
int dp[maxN][2];
void dfs(int u, int father) {
	for (int i = head[u]; i; i = nxt[i]) {
		int v = to[i];
		if (v == father) continue;
		dfs(v, u);
		dp[u][0] = 1ll * dp[u][0] * (dp[v][0] + 1ll * m * dp[v][1] % mod) %mod;
		dp[u][1] = 1ll * dp[u][1] * (dp[v][0] + 1ll * (m - 1) * dp[v][1] % mod) %mod;
	}
}
int main() {
	cin >> n >> m;
	for (int i = 1, u, v; i < n; ++ i) {
		cin >> u >> v;
		addEdge(u, v), addEdge(v, u);
	}
	for (int i = 1; i <= n; ++ i) {
		dp[i][0] = dp[i][1] = 1;
	}
	dfs(1, 0);
	cout << (dp[1][0] + 1ll * m * dp[1][1] % mod) % mod << endl;
	return 0;
}

蒟蒻马蜂总被同学嘲讽求改进。

2025/1/22 20:08
加载中...