Submission #785548

#TimeUsernameProblemLanguageResultExecution timeMemory
785548amukkalirSprinkler (JOI22_sprinkler)C++17
15 / 100
1178 ms25324 KiB
#include "bits/stdc++.h"
using namespace std; 

typedef long long ll; 
#define pii pair<int,int> 
#define fi first 
#define se second 
#define pb push_back

const int N = 2e5; 
long long h[N+5]; 
int n, l; 
vector<int> adj[N+5]; 
bool vis[N+5][45];

void dfs (int u, int prv, long long w, int dst) {
    if (dst < 0) return; 
    h[u] *= w; 
    h[u] %= l;
    //cerr << u << " lalala " << h[u] << endl;  
    for (int v : adj[u]) {
        if (v==prv) continue; 
        dfs(v, u, w, dst-1); 
    }
}

void dfs4 (int u, int prv, long long w, int dst) {
    if (dst < 0) return; 
    if (vis[u][dst]) return; 
    vis[u][dst] = true; 
    h[u] *= w; 
    h[u] %= l;
    //cerr << u << " lalala " << h[u] << endl;  
    for (int v : adj[u]) {
        if (v==prv) continue; 
        dfs4(v, u, w, dst-1); 
    }
}

void sub4() {
    int q; cin>>q; 
    while (q--) {
        int tp; 
        cin >> tp; 
        if (tp == 1) {
            int x, d, w; 
            cin >> x >> d >> w; 
            dfs4(x, 0, w, d); 
        } else {
            int x;
            cin >> x; 
            cout << h[x] << endl; 
        }
    }
}

void sub1() {
    int q; cin>>q; 
    while (q--) {
        int tp; 
        cin >> tp; 
        if (tp == 1) {
            int x, d, w; 
            cin >> x >> d >> w; 
            dfs(x, 0, w, d); 
        } else {
            int x;
            cin >> x; 
            cout << h[x] << endl; 
        }
    }
}

signed main () {
    int t=1; 
    //scanf("%d", &t);
    while(t--) {
        cin >> n >> l; 
        for(int i=1; i<n; i++) {
            int a, b; 
            cin >> a >> b; 
            adj[a].pb(b);
            adj[b].pb(a); 
        }
        for (int i=1; i<=n; i++) {
            cin >> h[i]; 
        } 
        if (n <= 1000) sub1(); 
        else sub4(); 
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...