이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "Anyalib.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 510;
const int L_SZ = 1000;
const int MOD = 12;
static vector<int> grafo[MAXN];
static int N,lastPtr,resposta[2*MAXN],maioral[MAXN],custo[MAXN];
static int especial[MAXN],ini[MAXN],fim[MAXN],pai[MAXN];
static int e1[MAXN],e2[MAXN],distancia[MAXN];
static void dfs(int v,int p){
maioral[v] = 0;
for(int i : grafo[v]){
int u = (e1[i] != v) ? (e1[i]) : (e2[i]);
if(u == p) continue;
pai[u] = i;
dfs(u,v);
maioral[v] = max(maioral[v],maioral[u] + 1);
}
if(maioral[v] == MOD){
maioral[v] = 0;
especial[v] = 1;
}
}
static void dfs_bits(int v,int p,int depth){
distancia[v] = depth;
for(int i : grafo[v]){
int u = (e1[i] != v) ? (e1[i]) : (e2[i]);
if(u == p) continue;
dfs_bits(u,v,depth + custo[i]);
}
}
void InitAnya(int n , int A[] , int B[]) {
N = n;
for(int i = 0;i<N-1;i++){
grafo[A[i]].push_back(i);
grafo[B[i]].push_back(i);
e1[i] = A[i];
e2[i] = B[i];
}
lastPtr = N-1;
dfs(0,-1);
especial[0] = 0;
for(int i = 0;i<N;i++){
if(especial[i]) continue;
ini[i] = lastPtr;
fim[i] = lastPtr + 8;
lastPtr += 9;
}
}
void Anya(int C[]){
memset(resposta,0,sizeof(resposta));
for(int i = 0;i<N-1;i++){
custo[i] = C[i];
resposta[i] = C[i];
}
dfs_bits(0,-1,0);
for(int i = 0;i<N;i++){
if(!especial[i]) continue;
for(int j = ini[i], k = 0;j<=fim[i];k++,j++){
if(distancia[i] & (1 << k)) resposta[j] = 1;
else resposta[j] = 0;
}
}
for(int i = 0 ; i < L_SZ ; i++){
if(resposta[i] != 0 && resposta[i] != 1){
printf("Vish %d %d\n",i,resposta[i]);
assert(false);
}
Save(i , resposta[i]);
}
}
#include "Borislib.h"
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 510;
const int MOD = 12;
static vector<int> grafo[MAXN];
static int N,lastPtr,maioral[MAXN];
static int especial[MAXN],ini[MAXN],fim[MAXN],pai[MAXN];
static int e1[MAXN],e2[MAXN];
static void dfs(int v,int p){
maioral[v] = 0;
for(int i : grafo[v]){
int u = (e1[i] != v) ? (e1[i]) : (e2[i]);
if(u == p) continue;
pai[u] = i;
dfs(u,v);
maioral[v] = max(maioral[v],maioral[u] + 1);
}
if(maioral[v] == MOD){
maioral[v] = 0;
especial[v] = 1;
}
}
void InitBoris(int n , int A[] , int B[]) {
N = n;
for(int i = 0;i<N-1;i++){
grafo[A[i]].push_back(i);
grafo[B[i]].push_back(i);
e1[i] = A[i];
e2[i] = B[i];
}
lastPtr = N-1;
dfs(0,-1);
especial[0] = 0;
for(int i = 0;i<N;i++){
if(especial[i]) continue;
ini[i] = lastPtr;
fim[i] = lastPtr + 8;
lastPtr += 9;
}
}
static int doQuery(int v){
if(v == 0) return 0;
if(especial[v]){
int tot = 0;
for(int i = ini[v],j = 0;i <= fim[v];i++,j++){
if(Ask(i)) tot += (1 << j);
}
return tot;
}
else{
int i = pai[v];
int u = (e1[i] != v) ? (e1[i]) : (e2[i]);
int x = doQuery(u), y = Ask(i);
return x + y;
}
}
int Boris(int city) {
return doQuery(city);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |