제출 #876843

#제출 시각아이디문제언어결과실행 시간메모리
876843simona1230Sprinkler (JOI22_sprinkler)C++17
100 / 100
1281 ms107232 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; if(lvl>0) { curr[i][lvl-1]*=w; curr[i][lvl-1]%=l; } if(i==1) { for(int j=0;j<lvl-1;j++) { curr[i][j]*=w; curr[i][j]%=l; } } if(i!=1&&lvl!=0) upd(p[i],lvl-1); } long long get(long long i,long long lvl) { long long here=curr[i][lvl]; if(i!=1&&lvl!=40) here*=get(p[i],lvl+1); 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)*h[x])%l<<endl; } } } int main() { read(); solve(); return 0; }

컴파일 시 표준 에러 (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...