珍稀厌氧代码求调
查看原帖
珍稀厌氧代码求调
605226
modfisher楼主2023/10/18 17:27

rt,头一次见厌氧的,很激动。

不吸氧能AC。

#include <bits/stdc++.h>

using namespace std;

const int maxn = 405, mod = 1e9 + 7;

int n, w, m;
int head[maxn], nxt[maxn << 1], to[maxn << 1], ww[maxn << 1], cnt = 0, siz[maxn], in[maxn];
long long dp[maxn][maxn][2];

void add(int u, int v, int w){
	nxt[++ cnt] = head[u];
	to[cnt] = v;
	ww[cnt] = w;
	head[u] = cnt;
}
void dfs(int x, int f){
	dp[x][0][0] = dp[x][1][1] = 1;
	siz[x] = 1;
	for(int i = head[x]; i; i = nxt[i]){
		int j = to[i];
		dfs(j, x);
		siz[x] += siz[j];
		for(int k = min(siz[x], w); k >= 0; k --){
			long long dp0 = 0, dp1 = 0;
			for(int l = 0; l <= min(siz[j], w); l ++){
				dp0 += (dp[j][l][0] + dp[j][l][1]) * dp[x][k - l][0] % mod;
				if(ww[i] == 2){
					dp1 += dp[j][l][0] * dp[x][k - l][1] % mod;
				}else{
					dp1 += dp[j][l][1] * dp[x][k - l][1] % mod;
				}
				dp0 %= mod;
				dp1 %= mod;
			}
			dp[x][k][0] = dp0;
			dp[x][k][1] = dp1;
		}
	}
}

int main(){
	scanf("%d %d %d", &n, &w, &m);
	for(int i = 1; i <= m; i ++){
		char c;
		int u, v;
		scanf("%c", &c);
		scanf("%c %d %d", &c, &u, &v);
		int d = 1 + (c == 'A');
		add(u, v, d);
		in[v] += 1;
	}
	for(int i = 1; i <= n; i ++){
		if(in[i] == 0){
			add(0, i, 1);
		}
	}
	dfs(0, 0);
	printf("%lld", dp[0][w][0] % mod);
	return 0;
}
2023/10/18 17:27
加载中...