#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN = 2e5 + 10;
int n, m, q;
set<pair<int, long long>> adj[MAXN];
int colorr[MAXN];
long long odl[MAXN];
int parent[MAXN];
void dfs(int v, int k, long long maxOdl) {
if (odl[v] > maxOdl)
return;
colorr[v] = k;
for (auto u : adj[v]) {
if (u.first == parent[v])
continue;
odl[u.first] = odl[v] + u.second;
dfs(u.first, k, maxOdl);
}
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m >> q;
for (int i = 0; i < m; i++) {
int a, b;
long long d; cin >> a >> b >> d;
adj[a].insert({b, d});
adj[b].insert({a, d});
}
for (int i = 0; i < q; i++) {
//cout << i << ' ';
int type; cin >> type;
switch (type) {
int a, b;
long long d;
case 1:
cin >> a >> b >> d;
adj[a].insert({b, d});
adj[b].insert({a, d});
break;
case 2:
cin >> a >> b;
d = (*(adj[a].lower_bound({b, 0}))).second;
adj[a].erase({b, d});
adj[b].erase({a, d});
break;
case 3:
int start, maxOdl, color; cin >> start >> maxOdl >> color;
parent[start] = 0;
odl[start] = 0;
dfs(start, color, maxOdl);
break;
case 4:
int v; cin >> v;
cout << colorr[v] << '\n';
break;
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <bits/stdc++.h> using namespace std; constexpr int MAXN = 2e5 + 10; int n, m, q; set<pair<int, long long>> adj[MAXN]; int colorr[MAXN]; long long odl[MAXN]; int parent[MAXN]; void dfs(int v, int k, long long maxOdl) { if (odl[v] > maxOdl) return; colorr[v] = k; for (auto u : adj[v]) { if (u.first == parent[v]) continue; odl[u.first] = odl[v] + u.second; dfs(u.first, k, maxOdl); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> q; for (int i = 0; i < m; i++) { int a, b; long long d; cin >> a >> b >> d; adj[a].insert({b, d}); adj[b].insert({a, d}); } for (int i = 0; i < q; i++) { //cout << i << ' '; int type; cin >> type; switch (type) { int a, b; long long d; case 1: cin >> a >> b >> d; adj[a].insert({b, d}); adj[b].insert({a, d}); break; case 2: cin >> a >> b; d = (*(adj[a].lower_bound({b, 0}))).second; adj[a].erase({b, d}); adj[b].erase({a, d}); break; case 3: int start, maxOdl, color; cin >> start >> maxOdl >> color; parent[start] = 0; odl[start] = 0; dfs(start, color, maxOdl); break; case 4: int v; cin >> v; cout << colorr[v] << '\n'; break; } } } |
English