# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
114836 | shayan_p | 항공 노선도 (JOI18_airline) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
// High above the clouds there is a rainbow...
#include<bits/stdc++.h>
#include<Boblib.h>
#define F first
#define S second
#define PB push_back
#define sz(s) int((s).size())
#define bit(n,k) (((n)>>(k))&1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int maxn=1111,lg=13;
static bool bad[maxn];
static int lab[maxn];
static vector<int>v[maxn];
static vector<pii>ans;
static void solve(int u,int bt=0){
bad[u]=1;
int nxt=-1;
for(int y:v[u]){
if(bad[y])
lab[y]+= (1<<bt);
else
nxt=y;
}
if(nxt!=-1) solve(nxt,bt+1);
}
void Bob(int n,int m,int a[],int b[]){
for(int i=0;i<m;i++)
v[a[i]].PB(b[i]), v[b[i]].PB(a[i]);
int w=0;
for(int i=0;i<n;i++){
if(sz(v[i])>sz(v[w])) w=i;
}
bad[w]=1;
for(int y:v[w]){
bad[y]=1;
}
for(int i=0;i<n;i++){
if(bad[i]) continue;
int C=0;
for(int y:v[i])
C+= !bad[y];
if(C==1 && sz(v[i])!=1) solve(i);
}
int N=0,M=0;
for(int i=0;i<m;i++){
if(lab[a[i]]!=0 && lab[b[i]]!=0)
ans.PB( { lab[a[i]]-1, lab[b[i]]-1 } ),M++;
}
for(int i=0;i<n;i++){
if(lab[i]!=0)
N++;
}
InitMap(N,M);
for(pii p:ans){
MakeMap(p.F,p.S);
}
}
// High above the clouds there is a rainbow...
#include<bits/stdc++.h>
#include<Boblib.h>
#define F first
#define S second
#define PB push_back
#define sz(s) int((s).size())
#define bit(n,k) (((n)>>(k))&1)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int maxn=1111,lg=13;
static bool bad[maxn];
static int lab[maxn];
static vector<int>v[maxn];
static vector<pii>ans;
static void solve(int u,int bt=0){
bad[u]=1;
int nxt=-1;
for(int y:v[u]){
if(bad[y])
lab[y]+= (1<<bt);
else
nxt=y;
}
if(nxt!=-1) solve(nxt,bt+1);
}
void Bob(int n,int m,int a[],int b[]){
for(int i=0;i<m;i++)
v[a[i]].PB(b[i]), v[b[i]].PB(a[i]);
int w=0;
for(int i=0;i<n;i++){
if(sz(v[i])>sz(v[w])) w=i;
}
bad[w]=1;
for(int y:v[w]){
bad[y]=1;
}
for(int i=0;i<n;i++){
if(bad[i]) continue;
int C=0;
for(int y:v[i])
C+= !bad[y];
if(C==1 && sz(v[i])!=1) solve(i);
}
int N=0,M=0;
for(int i=0;i<m;i++){
if(lab[a[i]]!=0 && lab[b[i]]!=0)
ans.PB( { lab[a[i]]-1, lab[b[i]]-1 } ),M++;
}
for(int i=0;i<n;i++){
if(lab[i]!=0)
N++;
}
InitMap(N,M);
for(pii p:ans){
MakeMap(p.F,p.S);
}
}