Submission #599102

#TimeUsernameProblemLanguageResultExecution timeMemory
599102Soumya1Airline Route Map (JOI18_airline)C++17
100 / 100
777 ms24968 KiB
#include "Alicelib.h"
#include <bits/stdc++.h>
using namespace std;
void Alice(int n, int m, int U[], int V[] ){
	vector<pair<int, int>> edges;
	for (int i = 0; i < m; i++) {
		edges.push_back({U[i], V[i]});
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < 10; j++) {
			if ((i >> j) & 1) {
				edges.push_back({i, n + j});
			}
		}
	}
	for (int i = 1; i < 10; i++) {
		edges.push_back({n + i, n + i - 1});
	}
	for (int i = 0; i < n; i++) {
		edges.push_back({i, n + 10});
	}
	for (int i = 0; i < 10; i++) {
		edges.push_back({n + i, n + 10});
		edges.push_back({n + i, n + 11});
	}
	InitG(n + 12, edges.size());
	for (int i = 0; i < edges.size(); i++) {
		MakeG(i, edges[i].first, edges[i].second);
	}
}

#include "Boblib.h"
#include <bits/stdc++.h>
using namespace std;
void Bob(int V, int U, int C[], int D[]){
	int n = V - 12;
	vector<int> deg(V);
	vector<vector<bool>> ad(V, vector<bool> (V));
	for (int i = 0; i < U; i++) {
		deg[C[i]]++, deg[D[i]]++;
		ad[C[i]][D[i]] = ad[D[i]][C[i]] = true;
	}
	int s1, s2;
	for (int i = 0; i < V; i++) {
		if (deg[i] == V - 2) {
			s1 = i;
			for (int j = 0; j < V; j++) {
				if (j != i && !ad[j][i]) s2 = j;
			}
			break;
		}
	}
	vector<bool> actual(V, true);
	actual[s1] = actual[s2] = false;
	int start = -1;
	vector<int> value(V), id(V);
	for (int i = 0; i < V; i++) {
		if (ad[s2][i]) {
			actual[i] = false;
		}
	}
	vector<int> fake_deg(V);
	for (int i = 0; i < U; i++) {
		if (!actual[C[i]] && !actual[D[i]]) {
			fake_deg[C[i]]++, fake_deg[D[i]]++;
		}
	}
	for (int i = 0; i < V; i++) {
		if (i == s1 || i == s2 || actual[i]) continue;
		if (fake_deg[i] == 3 && (start == -1 || deg[i] > deg[start])) start = i;
	}
	{
		vector<bool> vis(V);
		int cur = 0;
		for (int i = 0; i < 10; i++) {
			vis[start] = true;
			value[start] = cur++;
			for (int j = 0; j < V; j++) {
				if (j == s1 || j == s2 || actual[j] || vis[j] || !ad[start][j]) continue;
				start = j;
				break;
			}
		}
		for (int i = 0; i < V; i++) {
			if (!actual[i]) continue;
			for (int j = 0; j < V; j++) {
				if (actual[j] || j == s1 || j == s2 || !ad[i][j]) continue;
				id[i] |= (1 << value[j]);
			}
		}
	}
	vector<pair<int, int>> edges;
	for (int i = 0; i < U; i++) {
		if (actual[C[i]] && actual[D[i]]) {
			edges.push_back({id[C[i]], id[D[i]]});
		}
	}
	InitMap(V - 12, edges.size());
	for (auto [a, b] : edges) {
		MakeMap(a, b);
	}
}

Compilation message (stderr)

Alice.cpp: In function 'void Alice(int, int, int*, int*)':
Alice.cpp:27:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |  for (int i = 0; i < edges.size(); i++) {
      |                  ~~^~~~~~~~~~~~~~

Bob.cpp: In function 'void Bob(int, int, int*, int*)':
Bob.cpp:5:6: warning: unused variable 'n' [-Wunused-variable]
    5 |  int n = V - 12;
      |      ^
Bob.cpp:56:35: warning: 's2' may be used uninitialized in this function [-Wmaybe-uninitialized]
   56 |     if (actual[j] || j == s1 || j == s2 || !ad[i][j]) continue;
      |                                 ~~^~~~~
Bob.cpp:56:24: warning: 's1' may be used uninitialized in this function [-Wmaybe-uninitialized]
   56 |     if (actual[j] || j == s1 || j == s2 || !ad[i][j]) continue;
      |                      ~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...