제출 #1143661

#제출 시각아이디문제언어결과실행 시간메모리
1143661edogawa_somethingSprinkler (JOI22_sprinkler)C++20
30 / 100
3614 ms159220 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<ll> vii; typedef pair<ll,ll> pii; #define F first #define S second #define pb push_back #define all(v) v.begin(),v.end() #define pow poww const ll M=3e6+10; const ll inf=1e18; const ll mod=1e9+7; ll pow(ll x,ll y,ll mod=mod){ x%=mod; ll res=1; while(y>0){ if((y&1)>0) res*=x,res%=mod; x*=x,x%=mod; y/=2; } return res; } ll sub[45][M],p[M]; ll n,l,q,h[M]; vii adj[M]; void dfs(ll x,ll pa=-1){ p[x]=pa; for(auto it:adj[x]){ if(it==pa) continue; dfs(it,x); } } int main(){ ios_base::sync_with_stdio(0),cin.tie(0); ll TC=1; //cin>>TC; while(TC--){ cin>>n>>l; for(int i=0;i<n-1;i++){ ll x,y; cin>>x>>y; x--,y--; adj[x].pb(y),adj[y].pb(x); } for(int i=0;i<45;i++){ for(int j=0;j<n;j++) sub[i][j]=0; } dfs(0); for(int i=0;i<n;i++) cin>>h[i]; cin>>q; while(q--){ ll type; cin>>type; if(type==1){ ll x,d,w; cin>>x>>d>>w; x--; for(int i=0;i<=d;i++){ for(int j=0;j<=d-i;j++){ sub[j][x]++; } if(x==0) break; x=p[x]; } } else{ ll x; cin>>x; x--; ll cx=x; ll res=0; for(int i=0;i<=40;i++){ res+=sub[i][x]; if(x!=0&&i!=40) res-=sub[i+2][x]; if(x==0) break; x=p[x]; } cout<<(pow(2,res,l)*h[cx])%l<<'\n'; } } } }
#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...