Submission #101118

#TimeUsernameProblemLanguageResultExecution timeMemory
101118gs14004City (JOI17_city)C++17
22 / 100
514 ms56792 KiB
#include "Encoder.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 250005;

vector<int> gph[MAXN];
int dfn[MAXN], sz[MAXN], piv;

void dfs(int x, int p){
	sz[x] = 1;
	dfn[x] = ++piv;
	for(auto &i : gph[x]){
		if(i != p){
			dfs(i, x);
			sz[x] += sz[i];
		}
	}
}

void Encode(int N, int A[], int B[]){
	for(int i=0; i<N-1; i++){
		gph[A[i]].push_back(B[i]);
		gph[B[i]].push_back(A[i]);
	}
	dfs(0, -1);
	for (int i = 0; i < N; ++i) {
		Code(i, ((long long)dfn[i] << 18) + sz[i]);
	}
}
#include "Device.h"

void InitDevice(){
}

int Answer(long long S, long long T){
	int dfnS = (S >> 18);
	int szS = S & ((1<<18) - 1);
	int dfnT = (T >> 18);
	int szT = T & ((1<<18) - 1);
	if(dfnS <= dfnT && dfnT + szT <= dfnS + szS){
		return 1;
	}
	if(dfnT <= dfnS && dfnS + szS <= dfnT + szT){
		return 0;
	}
	return 2;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...