Submission #945901

#TimeUsernameProblemLanguageResultExecution timeMemory
945901pccAirline Route Map (JOI18_airline)C++17
100 / 100
1284 ms83392 KiB
#include "Alicelib.h"
#include <cassert>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;


const int mxn = 1020;
const int H = 10;
/*
	InitG( 3, 2 );
	MakeG( 1, 2 );
*/
#define pii pair<int,int>
#define fs first
#define sc second

namespace ALICE{
	vector<pair<int,int>> edges;
	void GO(int N,int M,int A[],int B[]){
		for(int i = 0;i<M;i++){
			edges.push_back({A[i],B[i]});
		}
		for(int i = 0;i<H;i++){
			for(int j = 0;j<N;j++){
				if(j&(1<<i)){
					edges.push_back({j,N+i});
				}
			}
			if(i)edges.push_back({N+i-1,N+i});
			edges.push_back({N+i,N+H});
		}
		for(int i = 0;i<N+H;i++){
			edges.push_back({i,N+H+1});
		}
		InitG(N+H+2,edges.size());
		int pt = 0;
		//cerr<<"ALICE:"<<endl;
		for(auto &i:edges){
			//cerr<<i.fs<<' '<<i.sc<<endl;
		}
		//cerr<<endl;
		for(auto &i:edges)MakeG(pt++,i.fs,i.sc);
		return;
	}
}

void Alice( int N, int M, int A[], int B[] ){
	ALICE::GO(N,M,A,B);
}

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

#define pii pair<int,int>
#define fs first
#define sc second

/*
InitMap( 3, 2 );
MakeMap( 1, 2 );
*/

namespace BOB{
	const int H = 10;
	const int mxn = 1020;
	set<int> g[mxn];
	int N,n;
	bitset<mxn> bit;
	int dp[mxn];
	int N10,N11;
	void get_ind(){
		for(int i = 0;i<N;i++){
			if(g[i].size() == N-2){
				N11 = i;
				//cerr<<"N11:"<<i<<endl;
				for(int j = 0;j<N;j++){
					if(i==j||g[i].find(j) != g[i].end())continue;
					N10 = j;
					//cerr<<"N10:"<<j<<endl;
					return;
				}
			}
		}
		assert(false);
		return;
	}
	vector<int> bg[mxn];
	vector<int> get_num(){
		vector<int> vv;
		for(auto &i:g[N10]){
			bit[i] = true;
			vv.push_back(i);
		}
		for(auto &i:vv){
			for(auto &j:g[i]){
				if(bit[j]){
					bg[i].push_back(j);
				}
			}
		}
		vector<int> one;
		for(auto &i:vv){
			//cerr<<i<<":";for(auto &j:bg[i])cerr<<j<<' ';cerr<<endl;
			if(bg[i].size() == 1)one.push_back(i);
		}
		assert(one.size()==2);
		//cerr<<"ONE:"<<one[0]<<' '<<one[1]<<endl;
		int pre = -1,now = (g[one[0]].size()>g[one[1]].size()?one[0]:one[1]);
		vector<int> re;
		bool flag = true;
		while(flag){
			re.push_back(now);
			flag = false;
			for(auto nxt:bg[now]){
				if(!bit[nxt]||nxt == pre)continue;
				pre = now;
				now = nxt;
				flag = true;
				break;
			}
		}
		return re;
	}
	vector<pii> ans;

	void answer(){
		//cerr<<N<<":"<<ans.size()<<endl;
		for(auto &i:ans){
			//cerr<<i.fs<<' '<<i.sc<<endl;
		}
		InitMap(N-H-2,ans.size());
		for(auto &i:ans){
			//cerr<<i.fs<<' '<<i.sc<<endl;
			MakeMap(i.fs,i.sc);
		}
		return;
	}

	void GO(int NN,int M,int A[],int B[]){
		N = NN;
		n = N-12;
		for(int i = 0;i<M;i++){
			g[A[i]].insert(B[i]);
			g[B[i]].insert(A[i]);
		}
		//cerr<<"BOB"<<endl;
		for(int i = 0;i<M;i++){
			//cerr<<A[i]<<' '<<B[i]<<endl;
		}
		//cerr<<endl;
		get_ind();
		auto v = get_num();
		assert(v.size() == H);
		for(auto &i:v)bit[i] = true;
		bit[N10] = bit[N11] = true;
		for(int i = 0;i<H;i++){
			for(auto nxt:g[v[i]]){
				dp[nxt] |= 1<<i;
			}
		}
		for(int i = 0;i<N;i++){
			if(bit[i])continue;
			for(auto nxt:g[i]){
				if(nxt<i||bit[nxt])continue;
				ans.push_back({dp[i],dp[nxt]});
			}
		}
		answer();
	}
}

void Bob( int V, int U, int C[], int D[] ){
	BOB::GO(V,U,C,D);
}

Compilation message (stderr)

Alice.cpp: In function 'void ALICE::GO(int, int, int*, int*)':
Alice.cpp:39:13: warning: unused variable 'i' [-Wunused-variable]
   39 |   for(auto &i:edges){
      |             ^

Bob.cpp: In function 'void BOB::get_ind()':
Bob.cpp:26:19: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   26 |    if(g[i].size() == N-2){
      |       ~~~~~~~~~~~~^~~~~~
Bob.cpp: In function 'void BOB::answer()':
Bob.cpp:81:13: warning: unused variable 'i' [-Wunused-variable]
   81 |   for(auto &i:ans){
      |             ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...