#include "grader.h"
#include "encoder.h"
#include <bits/stdc++.h>
using namespace std;
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
void encode(int n, int h, int m, int *v1, int *v2){
vector<vector<int>> adj(n);
vector<pair<int,int>> edg(m);
vector<bool> marc(m);
vector<int> resp;
vector<vector<int>> pseudo(h,vector<int>(n,0));
L(i,0,m-1){
adj[v1[i]].push_back(i);
adj[v2[i]].push_back(i);
}
vector<vector<int>> dp(h,vector<int>(n,-1));
vector<int> pai(n);
auto bfs=[&](int node){
queue<int> fila;
fila.push(node);
dp[node][node]=0;
while(!fila.empty()){
int v=fila.front();
fila.pop();
for(auto e:adj[v]){
int vai=edg[e].first^edg[e].second^v;
if(dp[node][vai]!=-1)continue;
if(!marc[e])marc[e]=1;
if(node==0)pai[vai]=v;
dp[node][vai]=dp[node][v]+1;
fila.push(vai);
}
}
};
bfs(0);
auto send=[&](int x,int mx){
L(i,0,mx){
encode_bit((x&(1<<i))==0?0:1);
}
};
L(i,0,m-1){
if(marc[i]){
if(edg[i].first < h || edg[i].second<h)continue;
send(edg[i].first,9);
send(edg[i].second,9);
}
}
L(i,1,h-1)bfs(i);
L(i,1,h-1){
L(j,1,n-1){
if(dp[i][j]>dp[i][pai[j]])send(0,1);
else if(dp[i][j]==dp[i][j])send(1,1);
else send(2,1);
}
}
}
#include <bits/stdc++.h>
#include "grader.h"
#include "decoder.h"
using namespace std;
#define L(i,j,k) for(int i=(j);i<=(k);i++)
#define sz(v) ((int)(v).size())
#define all(v) (v).begin(),(v).end()
void decode(int n, int h) {
vector<vector<int>> adj(n);
auto liga=[&]()->bool{
int a=0;
L(i,0,9){
if(decode_bit()==1)a|=(1<<i);
}
int b=0;
L(i,0,9){
if(decode_bit()==1)b|=(1<<i);
}
adj[a].push_back(b);
adj[b].push_back(a);
return true;
};
L(j,1,n-1)liga();
/*
L(i,0,n-1){
cout<<i<<": "<<endl;
for(auto a:adj[i])cout<<a<<" ";
cout<<endl;
}
*/
vector<int> dist(n,-1);
vector<int> pai(n,0);
auto bfs=[&](int node){
hops(node,node,0);
dist[node]=0;
queue<int> fila;
fila.push(node);
while(!fila.empty()){
int a=fila.front();
fila.pop();
for(auto b:adj[a]){
if(dist[b]!=-1)continue;
pai[b]=a;
dist[b]=dist[a]+1;
hops(node,b,dist[b]);
fila.push(b);
}
}
};
bfs(0);
vector<vector<int>> dp(h,vector<int> (n));
L(i,1,h-1){
L(j,1,n-1){
int a=decode_bit();
int b=decode_bit();
a<<=1;
a|=b;
dp[i][j]=a;
}
}
int resp=0;
int hub=0;
auto calc=[&](auto&& self,int a,int b)->void{
if(dist[a]<dist[b])swap(a,b);
if(a==b)return;
if(dp[hub][a]==0){
resp++;
}
else if(dp[hub][a]==2){
resp--;
}
self(self,pai[a],b);
};
L(i,1,h-1){
hub=i;
L(j,0,n-1){
resp=0;
calc(calc,i,j);
}
}
}
# | 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... |