# |
제출 시각 |
아이디 |
문제 |
언어 |
결과 |
실행 시간 |
메모리 |
260374 |
2020-08-10T07:48:06 Z |
반딧불(#5056) |
항공 노선도 (JOI18_airline) |
C++14 |
|
704 ms |
39120 KB |
#include <bits/stdc++.h>
#include "Alicelib.h"
using namespace std;
typedef long long ll;
namespace AA{
vector<int> link[1020];
vector<pair<int, int> > edge;
}
using namespace AA;
void Alice(int N, int M, int A[], int B[]){
for(int i=0; i<M; i++){ /// original graph
link[A[i]].push_back(B[i]);
link[B[i]].push_back(A[i]);
}
for(int i=0; i<N+10; i++){ /// vertex X
link[N+11].push_back(i);
link[i].push_back(N+11);
}
for(int d=0; d<10; d++){ /// vertex d0, d1, ..., d9
for(int i=0; i<N; i++){
if(i & (1<<d)) link[i].push_back(N+d), link[N+d].push_back(i);
}
}
for(int i=0; i<10; i++){
link[N+i].push_back(N+10);
link[N+10].push_back(N+i);
}
for(int i=0; i<9; i++){
link[N+i].push_back(N+i+1);
link[N+i+1].push_back(N+i);
}
for(int i=0; i<N+12; i++){
for(auto &j: link[i]){
if(i < j) edge.push_back(make_pair(i, j));
}
}
InitG(N+12, (int)edge.size());
int cnt = 0;
for(auto &x: edge){
MakeG(cnt++, x.first, x.second);
}
}
#include <bits/stdc++.h>
#include "Boblib.h"
using namespace std;
typedef long long ll;
namespace BB{
int n, m;
int idx[1020];
vector<int> glink[1020];
vector<int> link[1002];
int vertexX, vertexY;
int vertexD[10];
vector<int> specialVertices;
bool isSpecial[1020];
int specialDegree[1020];
vector<int> specialLink[1020];
vector<pair<int, int> > edge;
}
using namespace BB;
void Bob(int V, int U, int C[], int D[]){
n = V-12;
for(int i=0; i<U; i++){
glink[C[i]].push_back(D[i]);
glink[D[i]].push_back(C[i]);
}
for(int i=0; i<V; i++){
if((int)glink[i].size() == n+10){
vertexX = i;
for(int j=0; j<V; j++) isSpecial[j] = 1;
isSpecial[i] = 0;
for(auto &x: glink[i]) isSpecial[x] = 0;
for(int j=0; j<V; j++){
if(isSpecial[j]) specialVertices.push_back(j);
}
vertexY = specialVertices[0];
isSpecial[vertexY] = 0;
specialVertices.clear();
for(auto &x: glink[vertexY]){
specialVertices.push_back(x);
isSpecial[x] = 1;
}
break;
}
}
int onedeg = 0;
for(auto &x: specialVertices){
for(auto &y: glink[x]){
if(isSpecial[y]){
specialDegree[x]++;
specialLink[x].push_back(y);
specialLink[y].push_back(x);
}
}
if(specialDegree[x] == 1) onedeg = max(onedeg, (int)glink[x].size());
}
for(auto &x: specialVertices){
if(specialDegree[x] == 1 && onedeg == (int)glink[x].size()){
vertexD[0] = x;
specialDegree[x] = 0;
int tmp = x, prv = 0;
for(int i=1; i<10; i++){
for(auto &y: specialLink[tmp]){
if(prv == y) continue;
prv = x;
vertexD[i] = tmp = y;
specialDegree[y] = i;
break;
}
}
break;
}
}
for(int i=0; i<V; i++){
if(isSpecial[i] || i == vertexX || i == vertexY) continue;
for(auto &x: glink[i]){
if(isSpecial[x]) idx[i] += 1 << specialDegree[x];
}
}
for(int i=0; i<V; i++){
if(isSpecial[i] || i == vertexX || i == vertexY) continue;
for(auto &x: glink[i]){
if(!isSpecial[x] && x != vertexX){
link[idx[i]].push_back(idx[x]);
}
}
}
for(int i=0; i<n; i++){
for(auto &x: link[i]){
if(i < x){
edge.push_back(make_pair(i, x));
}
}
}
InitMap(n, (int)edge.size());
for(auto &x: edge){
MakeMap(x.first, x.second);
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
6912 KB |
Wrong Answer [11] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
6912 KB |
Wrong Answer [11] |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
704 ms |
39120 KB |
Wrong Answer [11] |
2 |
Halted |
0 ms |
0 KB |
- |