# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
566761 | birthdaycake | 저장 (Saveit) (IOI10_saveit) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "grader.h"
#include "encoder.h"
using namespace std;
void encode(int n, int h, int p, int a[], int b[]){
vector<int>adj[1001];
int dis[1001],par[1001];
for(int i = 0; i < n; i++) {
dis[i] = INT_MAX;
}
for(int i = 0; i < p; i++){
adj[a[i]].push_back(b[i]);
adj[b[i]].push_back(a[i]);
}
dis[0] = par[0] = 0;
vector<int>d = {0};
int j = 0;
while(j < d.size()){
for(auto s: adj[d[j]]){
if(dis[s] == INT_MAX){
dis[s] = dis[d[j]] + 1;
par[s] = d[j];
d.push_back(s);
}
}
j++;
}
for(int i = 1; i < n; i++){
for(int k = 0; k < 10; k++){
if(par[i] & (1 << k)) encode_bit(1);
else encode_bit(0);
}
}
for(int i = 1; i < h; i++){
vector<int>pc(n, INT_MAX);
pc[i] = 0;
int j = 0;
vector<int>b = {i};
while(j < b.size()){
for(auto s:adj[b[j]]){
if(pc[s] == INT_MAX){
pc[s] = pc[b[j]] + 1;
b.push_back(s);
}
}
j++;
}
for(int k = 1; k < n; k++){
int diff = pc[k] - pc[par[k]];
if(diff != 0){
encode_bit(1);
if(diff < 0) encode_bit(1);
else encode_bit(0);
}else{
encode_bit(0);
}
}
}
}
#include<bits/stdc++.h>
#include "grader.h"
#include "encoder.h"
using namespace std;
void encode(int n, int h, int p, int a[], int b[]){
vector<int>adj[1001];
int dis[1001],par[1001];
for(int i = 0; i < n; i++) {
dis[i] = INT_MAX;
}
for(int i = 0; i < p; i++){
adj[a[i]].push_back(b[i]);
adj[b[i]].push_back(a[i]);
}
dis[0] = par[0] = 0;
vector<int>d = {0};
int j = 0;
while(j < d.size()){
for(auto s: adj[d[j]]){
if(dis[s] == INT_MAX){
dis[s] = dis[d[j]] + 1;
par[s] = d[j];
d.push_back(s);
}
}
j++;
}
for(int i = 1; i < n; i++){
for(int k = 0; k < 10; k++){
if(par[i] & (1 << k)) encode_bit(1);
else encode_bit(0);
}
}
for(int i = 1; i < h; i++){
vector<int>pc(n, INT_MAX);
pc[i] = 0;
int j = 0;
vector<int>b = {i};
while(j < b.size()){
for(auto s:adj[b[j]]){
if(pc[s] == INT_MAX){
pc[s] = pc[b[j]] + 1;
b.push_back(s);
}
}
j++;
}
for(int k = 1; k < n; k++){
int diff = pc[k] - pc[par[k]];
if(diff != 0){
encode_bit(1);
if(diff < 0) encode_bit(1);
else encode_bit(0);
}else{
encode_bit(0);
}
}
}
}