Submission #320576

#TimeUsernameProblemLanguageResultExecution timeMemory
320576seedkinLokahian Relics (FXCUP4_lokahia)C++17
0 / 100
2 ms748 KiB
#include "lokahia.h" #include <stdio.h> int root[205]; // who is root? int select[205]; // able to get mana? int isRoot[205]; // 1== root 0 == no int target; int findRoot(int r, int leaf) { if(r == leaf) return select[r]; int temp = root[leaf]; select[r] += select[leaf]; root[leaf] = r; select[leaf] = 0; isRoot[leaf] = 0; // isRoot[r] = 1; return temp == -1 ? select[r]: findRoot(r, temp); } int getSelect(int n) { if(root[n] != -1) return getSelect(root[n]); isRoot[n] = 0; return select[n]; } int FindBase(int N){ // printf("%d\n", CollectRelics(0, 1)); target = N / 2; int except = 0; for(int i =0;i < N; i++) { root[i] = -1; select[i] = 1; isRoot[i] = 1; } if(N % 2) isRoot[N-1] = 1; // for(int i =0; i+1 < N; i+=2) { // int r = CollectRelics(i, i+1); // if( r == -1) { // isRoot[i] = 1; // isRoot[i+1] = 1; // continue; // } // int num = findRoot(r, i); // num = findRoot(r, i+1); // if(num >= target) return r; // } for(int i =0; i < N; i++) { if(isRoot[i] ==0) continue; for(int j = i+1; j< N; j++) { if(isRoot[j] == 0) continue; int one = i; int two = j; int r = CollectRelics(one, two); if( r == -1) { isRoot[one] = 1; isRoot[two] = 1; continue; } int num = findRoot(r, one); num = findRoot(r, two); if(num >= target) return r; } except += getSelect(i); if(N - except < target) return -1; } // for(int i =0; i< N; i++) { // printf("node: %d select: %d\n", i, select[i]); // } return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...