Submission #876800

#TimeUsernameProblemLanguageResultExecution timeMemory
876800simona1230Sprinkler (JOI22_sprinkler)C++17
0 / 100
4083 ms96352 KiB
#include <bits/stdc++.h> using namespace std; long long n,l; vector<long long> v[200001]; long long h[200001]; void read() { cin>>n>>l; for(long long i=1;i<n;i++) { long long a,b; cin>>a>>b; v[a].push_back(b); v[b].push_back(a); } for(long long i=1;i<=n;i++) cin>>h[i]; } long long curr[200001][45]; long long q,t,x,d,w; long long used[200001]; long long p[200001]; void dfs(long long i) { used[i]=1; for(long long j=0;j<v[i].size();j++) { long long nb=v[i][j]; if(!used[nb]) { p[nb]=i; dfs(nb); } } } void upd(long long i,long long lvl) { curr[i][lvl]*=w; curr[i][lvl]%=l; //cout<<i<<","<<lvl<<" "<<w<<endl; if(i!=1&&lvl!=0) upd(p[i],lvl-1); } long long get(long long i,long long lvl,long long h) { long long here=1; for(long long j=lvl;j<=40;j++) { if(h!=0&&j!=40&&curr[h][j+1]!=0) here*=max((long long)1,curr[i][j]/curr[h][j+1]); else here*=curr[i][j]; here%=l; } if(i!=1&&lvl!=40) here*=get(p[i],lvl+1,i); return here%l; } void solve() { for(long long i=1;i<=n;i++) for(long long j=0;j<=40;j++) curr[i][j]=1; dfs(1); cin>>q; for(long long i=1;i<=q;i++) { cin>>t>>x; if(t==1) { cin>>d>>w; upd(x,d); } else { cout<<(get(x,0,0)*h[x])%l<<endl; } } } int main() { read(); solve(); return 0; }

Compilation message (stderr)

sprinkler.cpp: In function 'void dfs(long long int)':
sprinkler.cpp:26:24: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     for(long long j=0;j<v[i].size();j++)
      |                       ~^~~~~~~~~~~~
#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...