이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
const int MAXN = 5e4;
const int MAXM = 1e5;
int n, m, q;
vector<pii> edges[MAXN];
int weights[MAXM];
bool vis[MAXN];
int dfs(int cur, int mxw) {
if (vis[cur]) return 0;
int ans = 1;
vis[cur] = 1;
for (pii p: edges[cur]) {
if (vis[p.first] || weights[p.second] < mxw) continue;
ans += dfs(p.first, mxw);
}
return ans;
}
void prog1() {
for (int i = 0; i < q; i++) {
int t; cin >> t;
if (t == 1) {
int b, r; cin >> b >> r;
weights[b-1] = r;
}
else {
int s, r; cin >> s >> r;
s--;
fill(vis, vis+n, 0);
cout << dfs(s, r) << "\n";
}
}
}
class stree {
public:
int mn;
int lp, rp;
stree *l = nullptr;
stree *r = nullptr;
stree(int lv, int rv) {
lp = lv;
rp = rv;
if (lp == rp) {
mn = weights[lp];
}
else {
int m = (lp+rp)/2;
l = new stree(lp, m);
r = new stree(m+1, rp);
mn = min(l->mn, r->mn);
}
}
void upd(int p, int v) {
if (lp > p || rp < p) return;
if (lp == rp) {
mn = v;
return;
}
l->upd(p, v);
r->upd(p, v);
mn = min(l->mn, r->mn);
}
int far_left(int p, int v) { // >= p, val < v
if (rp < p || mn >= v) return n-1;
if (lp == rp) return lp;
int lq = l->far_left(p, v);
if (lq < n-1) return lq;
return r->far_left(p, v);
}
int far_right(int p, int v) { // <= p, val < v
if (lp > p || mn >= v) return -1;
if (lp == rp) return lp;
int rq = r->far_right(p, v);
if (rq > -1) return rq;
return r->far_right(p, v);
}
};
stree *tree;
void prog2() {
tree = new stree(0, n-2);
for (int i = 0; i < q; i++) {
int t; cin >> t;
if (t == 2) {
int s, w; cin >> s >> w; s--;
int r = tree->far_left(s, w);
int l = tree->far_left(s-1, w);
cout << (r-l) << "\n";
}
if (t == 1) {
int s, w; cin >> s >> w; s--;
tree->upd(s, w);
}
}
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int x, y; cin >> x >> y >> weights[i];
x--; y--;
edges[x].push_back(pii(y, i));
edges[y].push_back(pii(x, i));
}
cin >> q;
if (n <= 1000 && m <= 1000 && q <= 10000) {
prog1();
return 0;
}
prog2();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |