Submission #131539

#TimeUsernameProblemLanguageResultExecution timeMemory
131539SirCenessMeetings (JOI19_meetings)C++14
29 / 100
2066 ms984 KiB
#include "meetings.h"
#include <bits/stdc++.h>

using namespace std;
#define ll long long;
#define mod 1000000007
#define mp make_pair
#define pb push_back
#define bas(x) #x << ": " << x
#define prarr(x, n) cout << #x << ": "; for (int qsd = 0; qsd < n; qsd++) cout << x[qsd] << " "; cout << endl;
#define prarrv(x) cout << #x << ": "; for (int qsd = 0; qsd < (int)x.size(); qsd++) cout << x[qsd] << " "; cout << endl;
#define inside sl<=l%&&r<=sr
#define outside sr<l||r<sl

void get(int root, vector<int>& arr){
	//cout << "get(" << root << ")" << endl;
	//prarrv(arr);
	if (arr.size() == 0) return;
	else if (arr.size() == 1){
		//cout << "bridge(" << root << ", " << arr[0] << ")" << endl;
		Bridge(min(root, arr[0]), max(root, arr[0]));
		return;
	}
	int ch = arr[rand()%arr.size()];
	vector<int> alt;
	vector<int> ust;
	vector<int> dig;
	ust.pb(ch);
	int en = ch;
	for (int i = 0; i < arr.size(); i++){
		//cout << "query(" << root << ", " << ch << ", " << arr[i] << ")" << endl;
		if (ch == arr[i]) continue;
		int ans = Query(root, ch, arr[i]);
		if (ans == ch){
			alt.pb(arr[i]);
		} else if (ans == root){
			dig.pb(arr[i]);
		} else {
			ust.pb(arr[i]);
			if (arr[i] != en) en = Query(root, arr[i], en);
		}
	}
	
	for (int i = 0; i < ust.size(); i++){
		if (ust[i] == en){
			int tmp = ust[ust.size()-1];
			ust[ust.size()-1] = ust[i];
			ust[i] = tmp;
			break;
		}
	}
	ust.pop_back();
	
	Bridge(min(root, en), max(root, en));
	get(root, dig);
	get(en, ust);
	get(ch, alt);
}

void Solve(int N) {
	srand(time(0));
	vector<int> arr(N-1);
	for (int i = 1; i < N; i++) arr[i-1] = i;
	get(0, arr);
}

Compilation message (stderr)

meetings.cpp: In function 'void get(int, std::vector<int>&)':
meetings.cpp:30:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < arr.size(); i++){
                  ~~^~~~~~~~~~~~
meetings.cpp:44:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for (int i = 0; i < ust.size(); i++){
                  ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...