Submission #415289

#TimeUsernameProblemLanguageResultExecution timeMemory
415289CSQ31Tropical Garden (IOI11_garden)C++14
0 / 100
7 ms9932 KiB
#include "garden.h" #include <bits/stdc++.h> #include "gardenlib.h" using namespace std; #define sz(a) (int)(a.size()) #define pb push_back #define se second typedef vector<vector<int>> vii; typedef pair<int,int> pii; const int MAXN = 4e5+5; int nxt[MAXN][31]; vector<vector<pii>> g1(MAXN); void count_routes(int n, int m, int p, int r[][2], int q, int g[]) { for(int i=0;i<m;i++){ g1[r[i][0]].pb({m-i,r[i][1]}); g1[r[i][1]].pb({m-i,r[i][0]}); } for(int i=0;i<n;i++)sort(g1[i].begin(),g1[i].end(),greater<pii>()); for(int i=0;i<n;i++){ int to = g1[i][0].se; if(g1[to][0].se != i)nxt[i][0] = to; //not beautiful else nxt[i][0] = to+n; to = (sz(g1[i]) > 1)?g1[i][1].se:g1[i][0].se; if(g1[to][0].se != i)nxt[i+n][0] = to; //not beautiful else nxt[i+n][0] = to+n; } for(int k=1;k<31;k++){ for(int i=0;i<2*n;i++){ nxt[i][k] = nxt[nxt[i][k-1]][k-1]; } } for(int i=0; i<q; i++) { int ans = 0; for(int x=0;x<n;x++){ int cur = x; int cnt = g[i]; for(int j=0;j<31;j++){ if(cnt >= (1<<j)){ cur = nxt[cur][j]; cnt-=(1<<j); } } if(cur == p || cur == p+n)ans++; } answer(ans); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...