Submission #1358429

#TimeUsernameProblemLanguageResultExecution timeMemory
1358429weedywelonTropical Garden (IOI11_garden)C++20
69 / 100
5090 ms38932 KiB
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
#include <iomanip>
#include <limits.h>
#include <set>
#include <string>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <deque>
#include <map>
#include <chrono>
#include <random>
#include <bitset>
#include <tuple>
#include <cassert>
#include "garden.h"
#include "gardenlib.h"
#define SZ(x) (LL)(x.size())
#define FR(i,a,b) for(LL i=(a);i<(b);++i)
#define FOR(i,n) FR(i,0,n)
#define FAST ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define A first
#define B second
#define mp(a,b) make_pair(a,b)
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef unsigned __int128 U128;
typedef __int128 I128;
typedef std::pair<int,int> PII;
typedef std::pair<LL,LL> PLL;
typedef std::pair<LD,LD> PLD;
using namespace std;

const int LG=31;
void count_routes(int n, int m, int p, int r[][2], int q, int g[]){
	int adj[n+1][2];
	int far[2*(n+1)][LG];
	memset(adj,-1,sizeof(adj));
	memset(far,-1,sizeof(far));
	
	FOR(i,m){
		int u=r[i][0], v=r[i][1];
		if (adj[u][0]==-1) adj[u][0]=v;
		else if (adj[u][1]==-1) adj[u][1]=v;
		if (adj[v][0]==-1) adj[v][0]=u;
		else if (adj[v][1]==-1) adj[v][1]=u;
	}
	
	FOR(i,n){
		int v=adj[i][0];
		if (adj[v][0]==i) v+=n;
		
		far[i][0]=v;
		if (adj[i][1]!=-1){
			int v=adj[i][1];
			if (adj[v][0]==i) far[i+n][0]=v+n;
			else far[i+n][0]=v;
		}
		else far[i+n][0]=v;
	}
	
	FR(j,1,LG) FOR(i,2*n){
		far[i][j]=far[far[i][j-1]][j-1];
	}
	
	FOR(i,q){
		int k=g[i], ans=0;
		FOR(i,n){
			int cur=i;
			FOR(j,LG) if (k&(1<<j)) cur=far[cur][j];
			if (cur==p || cur==p+n) ans++;
		}
		answer(ans);
	}
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...