Submission #547314

#TimeUsernameProblemLanguageResultExecution timeMemory
547314ToroTNSprinkler (JOI22_sprinkler)C++14
100 / 100
1043 ms87360 KiB
#include<bits/stdc++.h> using namespace std; int n,l,u_i,v_i,h[200005],t,op,x,d,w,u,p[200005],arr[45],ed,kk,bruh; int prime[200005],phi; long long power[35],inv,cnt,dp[200005][45]; vector<int> v[200005],g; queue<int> q; int main() { scanf("%d%d",&n,&l); bruh=l; phi=l; for(int i=2;i<=100000;i++) { prime[i]=1; } for(int i=2;i<=100000;i++) { if(prime[i]==1) { for(int j=2;i*j<=100000;j++) { prime[i*j]=0; } } } for(int i=2;i<=100000;i++) { if(prime[i]==1) { if(l%i==0) { phi/=i; phi*=(i-1); while(1) { if(bruh%i==0) { bruh/=i; }else { break; } } } } } if(bruh!=1) { phi/=bruh; phi*=(bruh-1); } u=phi-1; for(int i=0;i<=30;i++) { g.push_back(u%2); u/=2; } for(int i=1;i<n;i++) { scanf("%d%d",&u_i,&v_i); v[u_i].push_back(v_i); v[v_i].push_back(u_i); } memset(p,-1,sizeof p); p[1]=0; q.push(1); while(!q.empty()) { u=q.front(); q.pop(); for(int i=0;i<v[u].size();i++) { if(p[v[u][i]]==-1) { p[v[u][i]]=u; q.push(v[u][i]); } } } for(int i=1;i<=n;i++) { scanf("%d",&h[i]); } for(int i=1;i<=n;i++) { for(int j=0;j<=40;j++) { dp[i][j]=1; } } scanf("%d",&t); while(t--) { scanf("%d",&op); if(op==1) { scanf("%d%d%d",&x,&d,&w); power[0]=w; for(int i=1;i<=30;i++) { power[i]=power[i-1]*power[i-1]; power[i]%=l; } inv=1; for(int i=0;i<=30;i++) { if(g[i]==1) { inv*=power[i]; inv%=l; } } u=x; for(int i=d;i>=0;i--) { arr[i]=u; ed=i; u=p[u]; if(u==0) { break; } } for(int i=d;i>=ed;i--) { /*dp[arr[i]][i]*=w; dp[arr[i]][i]%=l; if(i-1>=0&&i+1<=d) { dp[arr[i+1]][i-1]*=inv; dp[arr[i+1]][i-1]%=l; }*/ if(i!=ed) { dp[arr[i]][i]*=w; dp[arr[i]][i]%=l; dp[arr[i]][i-1]*=w; dp[arr[i]][i-1]%=l; }else { for(int j=0;j<=i;j++) { dp[arr[i]][j]*=w; dp[arr[i]][j]%=l; } } } }else { scanf("%d",&x); u=x; cnt=h[x]; for(int i=0;i<=40;i++) { /*for(int j=i;j<=40;j++) { cnt*=dp[u][j]; cnt%=l; }*/ cnt*=dp[u][i]; cnt%=l; u=p[u]; if(u==0) { break; } } printf("%lld\n",cnt); } } } /* 4 7 1 2 2 3 3 4 1 1 1 1 11 1 2 1 2 1 1 0 2 2 1 2 2 2 3 2 4 1 4 10 2 2 1 2 2 2 3 2 4 */

Compilation message (stderr)

sprinkler.cpp: In function 'int main()':
sprinkler.cpp:72:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |         for(int i=0;i<v[u].size();i++)
      |                     ~^~~~~~~~~~~~
sprinkler.cpp:10:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 |     scanf("%d%d",&n,&l);
      |     ~~~~~^~~~~~~~~~~~~~
sprinkler.cpp:61:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   61 |         scanf("%d%d",&u_i,&v_i);
      |         ~~~~~^~~~~~~~~~~~~~~~~~
sprinkler.cpp:83:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   83 |         scanf("%d",&h[i]);
      |         ~~~~~^~~~~~~~~~~~
sprinkler.cpp:92:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   92 |     scanf("%d",&t);
      |     ~~~~~^~~~~~~~~
sprinkler.cpp:95:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   95 |         scanf("%d",&op);
      |         ~~~~~^~~~~~~~~~
sprinkler.cpp:98:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   98 |             scanf("%d%d%d",&x,&d,&w);
      |             ~~~~~^~~~~~~~~~~~~~~~~~~
sprinkler.cpp:151:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  151 |             scanf("%d",&x);
      |             ~~~~~^~~~~~~~~
#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...