# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
785980 | jamkel | Two Transportations (JOI19_transportations) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define st first
#define nd second
typedef long long ll;
int odl=0,nu=0;
int k1=0,k2=0;
vector<int>Answer(vector<int>w)
{
return w;
}
void InitA(int N, int A, std::vector<int> U, std::vector<int> V, std::vector<int> C)
{
vector<vector<pair<int,int>>>g(N);
vector<int>w(N);
for(int i=0;i<A;i++)
{
g[U[i]].push_back({C[i],V[i]});
g[V[i]].push_back({C[i],U[i]});
}
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
for(ll i=0;i<g[0].size();i++)
{
q.push({g[0][i].st,g[0][i].nd});
}
bool y=false;
while(q.size()>0)
{
if(w[q.top().nd]>0)
{
q.pop();
}
else
{
for(int i=0;i<20;i++)
{
if(q.top().st&(1<<i))
{
y=true;
void SendA(bool y);
}
else
{
y=false;
void SendA(bool y);
}
}
for(int i=0;i<11;i++)
{
if(q.top().nd&(1<<i))
{
y=true;
void SendA(bool y);
}
else
{
y=false;
void SendA(bool y);
}
}
while(k2<11)
{
}
w[nu]=odl;
for(ll i=0;i<g[nu].size();i++)
{
q.push({g[nu][i].nd+odl,g[nu][i].nd});
}
if(nu==q.top().nd)
{
q.pop();
}
k1=0;k2=0;odl=0;nu=0;
}
}
Answer(w);
}
void ReceiveA(bool x)
{
if(k1<20)
{
if(x)
{
odl+=pow(2,k1);
}
k1++;
}
else
{
if(x)
{
nu+=pow(2,k2);
}
k2++;
}
}
#include <bits/stdc++.h>
using namespace std;
#define st first
#define nd second
typedef long long ll;
int odl=0,nu=0;
int k1=0,k2=0;
void InitB(int N, int B, std::vector<int> S, std::vector<int> T, std::vector<int> D)
{
vector<vector<pair<int,int>>>g(N);
vector<int>w(N);
for(int i=0;i<B;i++)
{
g[S[i]].push_back({D[i],T[i]});
g[T[i]].push_back({D[i],S[i]});
}
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>q;
for(ll i=0;i<g[0].size();i++)
{
q.push({g[0][i].st,g[0][i].nd});
}
bool x=false;
while(q.size()>0)
{
if(w[q.top().nd]>0)
{
q.pop();
}
else
{
while(k2<11)
{
}
if(odl>q.top().st)
{
odl=q.top().st;
nu=q.top().st;
}
for(int i=0;i<20;i++)
{
if(odl&(1<<i))
{
x=true;
void SendB(bool x);
}
else
{
x=false;
void SendB(bool x);
}
}
for(int i=0;i<11;i++)
{
if(nu&(1<<i))
{
x=true;
void SendB(bool x);
}
else
{
x=false;
void SendB(bool x);
}
}
w[nu]=odl;
for(ll i=0;i<g[nu].size();i++)
{
q.push({g[nu][i].nd+odl,g[nu][i].nd});
}
if(nu==q.top().nd)
{
q.pop();
}
k1=0;k2=0;odl=0;nu=0;
}
}
}
void ReceiveB(bool x)
{
if(k1<20)
{
if(x)
{
odl+=pow(2,k1);
}
k1++;
}
else
{
if(x)
{
nu+=pow(2,k2);
}
k2++;
}
}