#include <bits/stdc++.h>
#define ll long long
#define fors(u, n, s) for(ll u = (s); u < (n); u++)
#define foru(u, n) fors(u, n, 0)
#define vec vector
#define pb push_back
#define f first
#define s second
#define ir(a, b, x) (((a) <= (x)) && ((x) <= (b)))
#define pint pair<int, int>
#define us unsigned
using namespace std;
const int N = 3e5;
int n;
map<int, ll> edges[N];
int color[N];
void paint(int idx, ll dist, int c, int parent) {
color[idx]=c;
for(auto i : edges[idx]){
if(i.f == parent) continue;
if(i.s > dist) continue;
paint(i.f, dist - i.s, c, idx);
}
}
int main(){
ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0);
int m, q; cin >> n >> m >> q;
foru(_i, m){
int a, b; ll d; cin >> a >> b >> d; a--; b--;
edges[a][b]=d; edges[b][a]=d;
}
foru(_i, q) {
int c; cin >> c;
if (c == 1){
int a, b; ll d; cin >> a >> b >> d; a--; b--;
edges[a][b]=d; edges[b][a]=d;
} else if (c == 2){
int a; int b; cin >> a >> b; a--; b--;
edges[a].erase(b); edges[b].erase(a);
} else if (c == 3) {
int a; ll d; int c; cin >> a >> d >> c; a--;
paint(a, d, c, -1);
} else if (c == 4) {
int a; cin >> a; a--;
cout << color[a] << endl;
}
}
}
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> #define ll long long #define fors(u, n, s) for(ll u = (s); u < (n); u++) #define foru(u, n) fors(u, n, 0) #define vec vector #define pb push_back #define f first #define s second #define ir(a, b, x) (((a) <= (x)) && ((x) <= (b))) #define pint pair<int, int> #define us unsigned using namespace std; const int N = 3e5; int n; map<int, ll> edges[N]; int color[N]; void paint(int idx, ll dist, int c, int parent) { color[idx]=c; for(auto i : edges[idx]){ if(i.f == parent) continue; if(i.s > dist) continue; paint(i.f, dist - i.s, c, idx); } } int main(){ ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); int m, q; cin >> n >> m >> q; foru(_i, m){ int a, b; ll d; cin >> a >> b >> d; a--; b--; edges[a][b]=d; edges[b][a]=d; } foru(_i, q) { int c; cin >> c; if (c == 1){ int a, b; ll d; cin >> a >> b >> d; a--; b--; edges[a][b]=d; edges[b][a]=d; } else if (c == 2){ int a; int b; cin >> a >> b; a--; b--; edges[a].erase(b); edges[b].erase(a); } else if (c == 3) { int a; ll d; int c; cin >> a >> d >> c; a--; paint(a, d, c, -1); } else if (c == 4) { int a; cin >> a; a--; cout << color[a] << endl; } } } |
English