Submission #1279207

#TimeUsernameProblemLanguageResultExecution timeMemory
1279207NipphitchTropical Garden (IOI11_garden)C++20
100 / 100
1599 ms40048 KiB
#include "garden.h" #include "gardenlib.h" #include <bits/stdc++.h> using namespace std; #define pii pair <int,int> #define f first #define s second const int MXN=3e5+10; int n,m,st,nxt[2][MXN],d[2][MXN],cycle[2]; bool vis[2][MXN]; vector <int> adj[MXN]; vector <pii> adj2[MXN]; void dfs(int u,int state,int d_u){ d[state][u]=d_u; vis[state][u]=true; for(int v:adj[u]){ if(v==state*n+st) cycle[state]=d_u+1; if(!vis[state][v]) dfs(v,state,d_u+1); } } void count_routes(int N, int M, int P, int R[][2], int Q, int G[]) { n=N,m=M,st=P; memset(d,-1,sizeof(d)); cycle[0]=cycle[1]=-1; for(int i=0;i<m;i++){ adj2[R[i][0]].push_back({i,R[i][1]}); adj2[R[i][1]].push_back({i,R[i][0]}); } for(int i=0;i<n;i++){ sort(adj2[i].begin(),adj2[i].end()); nxt[0][i]=adj2[i][0].s; nxt[1][i]=adj2[i][adj2[i].size()>1].s; } for(int i=0;i<n;i++){ bool ok=(i==nxt[0][nxt[0][i]]); adj[n*ok+nxt[0][i]].push_back(i); ok=(i==nxt[0][nxt[1][i]]); adj[n*ok+nxt[1][i]].push_back(i+n); } dfs(st,0,0); dfs(st+n,1,0); for(int i=0;i<Q;i++){ int cnt=0; for(int u=0;u<n;u++){ for(int state=0;state<2;state++){ bool ok=true; if(d[state][u]==-1) ok=false; else if(cycle[state]==-1) ok=(d[state][u]==G[i]); else{ int rem=G[i]-d[state][u]; ok=(rem%cycle[state]==0 && rem>=0); } if(ok){ cnt++; break; } } } answer(cnt); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...