社区讨论
为什么访问负数下标不会re
P9527[JOIST 2022] 洒水器 / Sprinkler参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mhji2g2c
- 此快照首次捕获于
- 2025/11/04 02:55 4 个月前
- 此快照最后确认于
- 2025/11/04 02:55 4 个月前
第一篇题解如果输入
CPP2 5
1 2
3 4
1
1 2 0 4
,在第43行会访问负数下标,但是为什么没有re
CPP#include <iostream>
#include <vector>
#define ll long long
#define pb push_back
#define ull unsigned long long
#define rep(i, j, k) for(int i = j; i <= k; i++)
#define rop(i, j, k) for(int i = j; i >= k; i--)
using namespace std;
const int N = 2e5 + 5;
int n, m, l, h[N], fa[N];
ll tag[N][45];
vector<int> g[N];
inline void dfs(int u, int fat)
{
fa[u] = fat;
rep(i, 0, g[u].size() - 1){
int v = g[u][i];
if(v == fat) continue;
dfs(v, u);
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> l;
rep(i, 1, n - 1){
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
rep(i, 1, n) cin >> h[i];
rep(i, 1, n) rep(j, 0, 40) tag[i][j] = 1;
dfs(1, 0);
cin >> m;
rep(i, 1, m){
int t, x, d, w;
cin >> t >> x;
if(t == 1){
cin >> d >> w;
while(d >= 0 && x){
if(x > 1) tag[x][d] = tag[x][d] * w % l, tag[x][d - 1] = tag[x][d - 1] * w % l;
else{
rep(j, 0, d) tag[x][j] = tag[x][j] * w % l;
break;
}
d--;
x = fa[x];
}
}
else{
ll res = h[x];
rep(j, 0, 40){
if(!x) break;
res *= tag[x][j];
res %= l;
x = fa[x];
}
cout << res << "\n";
}
}
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...