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...