Submission #56744

#TimeUsernameProblemLanguageResultExecution timeMemory
56744DiuvenAirline Route Map (JOI18_airline)C++11
100 / 100
748 ms31040 KiB
#include "Alicelib.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> pii;

int n_A, m_A;

vector<pii> E;

void Alice( int N, int M, int A[], int B[] ){
	n_A=N, m_A=M;
	for(int i=0; i<m_A; i++){
		E.push_back({A[i], B[i]});
	}

	int P=N, Q=N+1;

	int X[10];
	for(int i=0; i<10; i++) X[i]=N+i+2;

	for(int i=0; i<N; i++){
		for(int j=0; j<10; j++)
			if(i&(1<<j))
				E.push_back({i, X[j]});
	}

	for(int i=0; i<10; i++)
		E.push_back({X[i], P});
	
	for(int i=0; i<N; i++)
		E.push_back({i, P});
	
	for(int i=0; i<10; i++)
		E.push_back({X[i], Q});

	for(int i=0; i<9; i++)
		E.push_back({X[i], X[i+1]});

	InitG(N+12, E.size());

	for(int i=0; i<(int)E.size(); i++){
		MakeG(i, E[i].first, E[i].second);
	}

}

#include "Boblib.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;

const int MX=2020;

int n_B, m_B;

bool G[MX][MX];
int deg1[MX];
vector<pii> ans;

void Bob( int V, int U, int C[], int D[] ){
	n_B=V, m_B=U;
	for(int i=0; i<m_B; i++){
		G[C[i]][D[i]]=G[D[i]][C[i]]=true;
		deg1[C[i]]++, deg1[D[i]]++;
	}

	int P=-1, Q=-1, N=V-12;

	for(int i=0; i<V; i++)
		if(deg1[i]==N+10) P=i;
	
	for(int i=0; i<V; i++)
		if(i!=P && !G[i][P]) Q=i;

	vector<int> X, Y;
	int deg2[10]={};
	bool done[MX]={};

	for(int i=0; i<V; i++)
		if(G[i][Q]) X.push_back(i);

	for(int i=0; i<10; i++)
		for(int j=i+1; j<10; j++)
			if(G[X[i]][X[j]]){
				deg1[X[i]]--, deg1[X[j]]--;
				deg2[i]++, deg2[j]++;
			}

	
	int a=-1, b=-1;
	for(int i=0; i<10; i++){
		if(deg2[i]==2) continue;
		if(a<0) a=X[i];
		else b=X[i];
	}

	if(deg1[a]<deg1[b]) swap(a, b);
	
	int now=a;

	Y.push_back(a);
	for(int i=0, now=a; i<10; i++){
		done[now]=true;
		for(int j=0; j<10; j++){
			if(!done[X[j]] && G[now][X[j]]){
				now=X[j]; break;
			}
		}
		Y.push_back(now);
	}

	int rev[MX]={};
	bool out[MX]={};

	for(int i=0; i<10; i++) out[Y[i]]=true;
	out[P]=out[Q]=true;

	for(int i=0; i<V; i++){
		if(out[i]) continue;
		for(int j=0; j<10; j++)
			rev[i]+=(G[i][Y[j]] ? (1<<j) : 0);
	}

	for(int i=0; i<V; i++){
		for(int j=i+1; j<V; j++){
			if(out[i] || out[j]) continue;
			if(!G[i][j]) continue;
			int x=rev[i], y=rev[j];
			ans.push_back({x,y});
		}
	}

	InitMap(N, ans.size());

	for(pii &p:ans)
		MakeMap(p.first, p.second);
}

Compilation message (stderr)

Bob.cpp: In function 'void Bob(int, int, int*, int*)':
Bob.cpp:56:6: warning: unused variable 'now' [-Wunused-variable]
  int now=a;
      ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...