WA+MLE,样例过不了,拍不出来哪里错了
查看原帖
WA+MLE,样例过不了,拍不出来哪里错了
482610
Mortidesperatslav楼主2024/3/24 19:40
#include<bits/stdc++.h>
#define mxn 100005
using namespace std;
vector<int> G[mxn], IG[mxn];
int a[mxn], sm[mxn], id[mxn], ml[mxn], in[mxn], out[mxn];
int rep[mxn];
int n, m, q;
queue<int> tq;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	for (int j = 1; j <= n; j++){
		int op;
		cin >> op;
		if (op == 1){
			cin >> id[j] >> sm[j];
			ml[j] = 1;
		}else if (op == 2)
			cin >> ml[j];
		else{
			ml[j] = 1;
			int ni;
			cin >> ni;
			for (int i = 1; i <= ni; i++){
				int u;
				cin >> u;
				G[j].push_back(u);
				IG[u].push_back(j);
				in[u]++;
				out[j]++;
			}
		}
	}
	ml[0] = 1;
	rep[0] = 1;
	cin >> q;
	for (int i = 1; i <= q; i++){
		int u;
		cin >> u;
		G[0].push_back(u);
		IG[u].push_back(0);
		out[0]++;
		in[u]++;
	}
	for (int i = 1; i <= n; i++)
		if (!out[i])
			tq.push(i);
	while (!tq.empty()){
		int u = tq.front();
		tq.pop();
		for (auto v : IG[u]){
			out[v]--;
			ml[v] *= ml[u];
			if (!out[v])
				tq.push(v);
		}
	}
	for (int i = 1; i <= n; i++)
		if (!in[i])
			tq.push(i);
	while (!tq.empty()){
		int u = tq.front(), nml = 1;
		tq.pop();
		for (auto v : G[u]){
			in[v]--;
			rep[v] = (rep[v] + rep[u] * nml) % 998244353;
			nml = (nml * rep[v]) % 998244353;
			if (!in[v])
				tq.push(v);
		}
	}
	for (int i = 1; i <= n; i++)
		a[i] = (1ll * a[i] * ml[0]) % 998244353;
	for (int i = 1; i <= m; i++)
		a[id[i]] = (a[id[i]] + rep[i] * sm[i]) % 998244353;
	for (int i = 1; i <= n; i++)
		cout << a[i] << " ";
}
2024/3/24 19:40
加载中...