Submission #1357121

#TimeUsernameProblemLanguageResultExecution timeMemory
1357121coderg300711Tropical Garden (IOI11_garden)C++20
0 / 100
1 ms344 KiB
#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
#define pll pair<long long,long long>
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define pb push_back
#define sz(x) (int)(x).size()
#define rsz resize
#define ass assign
#define F(i,l,r) for(int i=(l);i<(r);++i)
typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
template<typename T> using pqg = priority_queue<T, vector<T>, greater<T>>;
#define each(a,x) for(auto a:x)
#define FOR(i,a) for(int i=0;i<(a);i++)
#define ROF(i,a,b) for(int i=(b)-1;i>=(a);i--)
#define eb emplace_back
#define ft front()
#define V vector

#include "garden.h"
#include "gardenlib.h"

void count_routes(int n,int m,int p,int r[][2],int q,int g[]){
	V<int> fi_trail(n,-1),se_trail(n,-1);
	FOR(i,m){
		int u=r[i][0],v=r[i][1];
		if(!~fi_trail[u])fi_trail[u]=i;
		else if(!~se_trail[u])se_trail[u]=i;
		if(!~fi_trail[v])fi_trail[v]=i;
		else if(!~se_trail[v])se_trail[v]=i;
	}
	FOR(i,n){
		if(~!se_trail[i])se_trail[i]=fi_trail[i];
	}
	FOR(_,q){
		int k=g[_],cnt=0;
		FOR(st,n){
			int cur=st,lst=-1;
			FOR(step,k){
				int totake;
				if(fi_trail[cur]!=lst)totake=fi_trail[cur];
				else totake=se_trail[cur];
				if(r[totake][0]==cur)cur=r[totake][1];
				else cur=r[totake][0];
				lst=totake;
			}
			if(cur==p)cnt++;
		}
		answer(cnt);
	}
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...