Submission #1214682

#TimeUsernameProblemLanguageResultExecution timeMemory
1214682mychecksedadAirline Route Map (JOI18_airline)C++20
0 / 100
1561 ms1114112 KiB
#include "Alicelib.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define MOD (1000000000+7)
#define MOD1 (998244353)
#define pb push_back
#define all(x) x.begin(), x.end()
#define en cout << '\n'
#define ff first
#define ss second
#define pii pair<int,int>
#define vi vector<int>
const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30;

void Alice( int n, int m, int A[], int B[] ){
	vector<vector<bool>> E(n, vector<bool>(n));
	for(int i = 0; i <m; ++i) if(A[i]> B[i]) swap(A[i], B[i]); 
	for(int i = 0; i <m; ++i) E[A[i]][B[i]] = 1;


	vector<pii> P;
	for(int i = 0; i < n; ++i){
		for(int j = i + 1; j < n; ++j){
			if(E[i][j]){
				P.pb({i, j});
			}
		}
	}

	vi ID;
	for(int i = 0; i < 1024; ++i){
		if(__builtin_popcount(i) >= 2) ID.pb(i);
	}
	stable_sort(all(ID), [&](const int &x, const int &y){
		bool a = x % 2;
		bool b = y % 2;
		if(a == b) return x < y;
		if(a) return true;
		return false; 
	});


	for(int i = 0; i < n; ++i){
		for(int j = 0; j < 10; ++j){
			if((1<<j)&ID[i]){
				P.pb({i, n + j});
			}
		}
	}

	int t = n + 11;
	int s = n + 10;
	P.pb({s, t});

	for(int i = n; i < n + 10; ++i){
		P.pb({s, i});
	}

	for(int i = n + 5; i < n + 10; ++i){
		for(int j = i + 1; j < n + 10; ++j) P.pb({i, j});
	}
	for(int i = n + 4; i >= n; --i){
		for(int j = n+9, ptr = 0; ptr < (n+4-i); ++ptr, --j) P.pb({i, j});
	}



	int cnt = 0;
	InitG(n + 12, int(P.size()));
	for(auto [x, y]: P){
		// cerr << x << ' ' << y << '\n';
		MakeG(cnt++, x, y);
	}
}
#include "Boblib.h"
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define MOD (1000000000+7)
#define MOD1 (998244353)
#define pb push_back
#define all(x) x.begin(), x.end()
#define en cout << '\n'
#define ff first
#define ss second
#define pii pair<int,int>
#define vi vector<int>
const int N = 1e6+100, M = 1e5+10, K = 52, MX = 30;


void assertt(bool b){
	if(!b){
		vi v;
		for(int i = 1; i <= MOD; ++i){
			v.pb(i);
		}
	}
}

void Bob( int nn, int mm, int C[], int D[] ){
	int n = nn - 12;
	vi deg(nn);
	vector<vector<bool>> E(nn, vector<bool>(nn));
	for(int i = 0; i < mm; ++i){
		deg[C[i]]++;
		deg[D[i]]++;
		E[C[i]][D[i]] = E[D[i]][C[i]] = 1;
	}

	int t = -1;
	for(int i = 0; i < nn; ++i){
		if(deg[i] == 1){
			if(t == -1) t = i;
			else assertt(false);
		}
	}
	// return;
	int s = -1;
	for(int i = 0; i < nn; ++i){
		if(E[t][i]){
			if(s != -1) assertt(false);
			s = i;
		}
	}
	vi A;
	for(int i = 0; i < nn; ++i){
		if(i == s || i == t) continue;
		if(E[i][s]) A.pb(i);
	}

	vi degg(nn);
	for(int j = 0; j < 10; ++j){
		for(int i = 0; i < 10; ++i) degg[A[j]] += E[A[j]][A[i]];
	}

	sort(all(A), [&](const int &x, const int &y){
		return degg[x] < degg[y];
	});

	// 5, 4, 3, 2, 1, 6, 7, 8, 9, 10
	// 5, 4, 3, 2, 6, 1, 7, 8, 9, 10

	swap(A[1], A[3]);


	// for(int i = 1; i <= 10; ++i){
	// 	cerr  << deg[A[i-1]] << ' ';
	// }


	// 5, 2, 3, 4, 1, 6, 7, 8, 9, 10
	// 5, 2, 3, 4, 6, 1, 7, 8, 9, 10



	if(deg[A[4]] > deg[A[5]]){
		swap(A[0], A[4]);
	}else{
		swap(A[4], A[5]);
		swap(A[0], A[4]);
	}


	vi node(n, -1);

	vi ID;
	for(int i = 0; i < 1024; ++i){
		if(__builtin_popcount(i) >= 2) ID.pb(i);
	}

	stable_sort(all(ID), [&](const int &x, const int &y){
		bool a = x % 2;
		bool b = y % 2;
		if(a == b) return x < y;
		if(a) return true;
		return false; 
	});

	vi pos(1024, -1);
	for(int i = 0; i < ID.size(); ++i) pos[ID[i]] = i;	

	for(int i = 0; i < nn; ++i){
		if(i == s || i == t) continue;
		bool in = false;
		for(int x: A) in = in | (x == i);
		if(in) continue;
		int sum = 0;
		for(int j = 0; j < 10; ++j) sum += (1<<(j)) * E[i][A[j]];
		node[pos[sum]] = i;
		cerr << pos[sum] << ' ' << sum << '\n';
	}

	for(int i = 0; i < n; ++i){
		assertt(node[i] != -1);
	}

	vector<pii> P;
	for(int i = 0; i < n; ++i){
		for(int j = i + 1; j < n; ++j){
			int v = node[i], u = node[j];
			if(E[u][v]) P.pb({i, j});
		}
	}
	InitMap(n, int(P.size()));
	for(auto [x, y]: P) MakeMap(x, y);
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...