Submission #1306132

#TimeUsernameProblemLanguageResultExecution timeMemory
1306132nicolo_010Airline Route Map (JOI18_airline)C++20
100 / 100
234 ms54128 KiB
#include "Alicelib.h"
#include <bits/stdc++.h>
using namespace std;

const int block = 100;

void Alice( int n, int m, int A[], int B[] ){
	vector<vector<int>> edges(m);
	for (int i=0; i<m; i++) {
		edges[i] = {A[i], B[i]};
	}
	for (int i=n; i<n+11; i++) {
	    if (i-n <= 9) {
	        int b = i-n;
	        for (int j=0; j<n; j++) {
	            if (j&(1<<(b))) edges.push_back({i, j});
	        }
	        if (i-n < 9)edges.push_back({i, i+1});
	    }
	    else {
	        for (int j=0; j<n; j++) {
	            edges.push_back({i, j});
	        }
	        edges.push_back({i, i+1});
	    }
	}
	m = edges.size();
	InitG(n+12, m);
	for (int i=0; i<m; i++) {
	    MakeG(i, edges[i][0], edges[i][1]);
	}
}
#include "Boblib.h"
#include <bits/stdc++.h>
using namespace std;


void Bob( int v, int u, int C[], int D[] ){
    vector<vector<int>> adj(v);
    vector<vector<int>> grid(v, vector<int>(v, 0));
	adj.assign(v, {});
	int n = v-12;
	for (int i=0; i<u; i++) {
		int a = C[i];
		int b = D[i];
		adj[a].push_back(b);
		adj[b].push_back(a);
		grid[a][b] = 1;
		grid[b][a] = 1;
	}
	int node;
	vector<bool> vis(v, false);
	vector<bool> invalid(v, false);
	for (int i=0; i<v; i++) {
	    if (adj[i].size()==1 && adj[adj[i][0]].size() == n+1) {
	        node = adj[i][0];
	        break;
	    }
	}
	invalid[node] = true;
	int bit = node;
	for (int i=0; i<v; i++) {
	    if (!grid[i][node] && i != node) {
	        invalid[i] = true;
	        if (adj[i].size() <= adj[bit].size()) bit = i;
	    }
	}
	vector<int> id(v, 0);
	for (int i=9; i>=0; i--) {
	    vis[bit] = true;
	    for (auto x : adj[bit]) id[x] += (1<<i);
	    for (auto x : adj[bit]) {
	        if (invalid[x] && !vis[x]) {
	            bit = x;
	            break;
	        }
	    }
	}
	vector<vector<int>> edges;
	for (int i=0; i<v; i++) {
	    for (int j=i+1; j<v; j++) {
	        if (grid[i][j] && !invalid[i] && !invalid[j]) {
	            edges.push_back({id[i], id[j]});
	        }
	    }
	}
	int m = edges.size();
	InitMap(n, m);
	for (int i=0; i<m; i++) {
		MakeMap(edges[i][0], edges[i][1]);
	}
}

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