灵异事件
24 行处,明明是 i=0 才会进入这个if
,但它竟然给我输出 i=0,就尼玛离谱。
求助qwq
#include <cstdio>
#include <cassert>
#define int long long
const int MOD = 998244353LL;
int a[100005];
struct Edge {
int to, nxt;
} e[500005];
int head[100005], c[100005], T[100005], P[100005], V[100005], g[100005], f[100005], tot, n;
bool vis[100005];
inline void AddEdge(const int u, const int v) {
e[++ tot].to = v, e[tot].nxt = head[u], head[u] = tot;
}
inline int dfs(const int u, const int mul) {
printf("%d\n", u);
vis[u] = true;
f[u] = (f[u] + mul) % MOD;
if (T[u] != 3) return T[u] == 1 ? 1 : V[u];
int sum(f[u]);
f[u] = 0;
for (int i(head[u]); i; i = e[i].nxt) {
if (i && e[i].to == 0) {
printf("\n\n\n\nbjfjrnjbnejlvbnsfjbn %lld %lld\n\n\n\n", i, e[i].to);
assert(!i);
}
sum = sum * dfs(e[i].to, sum) % MOD;
}
}
signed main() {
int m, q;
scanf("%lld", &n);
for (int i(1); i <= n; ++ i) scanf("%lld", a + i), a[i] %= MOD;
scanf("%lld", &m);
for (int i(1); i <= m; ++ i) {
scanf("%lld", T + i);
if (T[i] == 1) scanf("%lld%lld", P + i, V + i);
else if (T[i] == 2) scanf("%lld", V + i);
else {
int c;
scanf("%lld", &c);
for (int j(1); j <= c; ++ j) scanf("%lld", g + j);
for (int j(c); j; -- j) AddEdge(i, g[j]);
}
}
scanf("%lld", &q);
while (q --) {
int Orz;
scanf("%lld", &Orz);
f[Orz] = 1;
}
for (int i(1); i <= m; ++ i)
if (f[i] && !vis[i]) dfs(i, 0);
int mult(1LL);
for (int i(1); i <= m; ++ i)
if (T[i] == 2) mult *= V[i], mult %= MOD;
for (int i(1); i <= n; ++ i) a[i] = a[i] * mult % MOD;
for (int i(1); i <= m; ++ i)
if (T[i] == 1) a[P[i]] = (a[P[i]] + f[i] * V[i] % MOD) % MOD;
for (int i(1); i <= n; ++ i) printf("%d ", a[i]);
return 0;
}