Submission #223131

#TimeUsernameProblemLanguageResultExecution timeMemory
223131AQTMeetings (JOI19_meetings)C++14
100 / 100
1922 ms1124 KiB
#include "meetings.h"
#include <bits/stdc++.h>

using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

void rec(vector<int> v){
	if(v.size() == 1){
		return;
	}
	else if(v.size() == 2){
		Bridge(min(v[0], v[1]), max(v[0], v[1]));
		return;
	}
    shuffle(v.begin(), v.end(), rng);
	//random_shuffle(v.begin(), v.end());
	int c = v[0];
	if(v.size() > 20){
		c = Query(v[0], v[1], v[2]);
	}
	vector<vector<int>> st;
	for(int i = 0; i<v.size(); i++){
		int n = v[i];
		if(n == c){
			continue;
		}
		bool b = 0;
		for(int j = 0; j<st.size(); j++){
			if(Query(n, st[j][0], c) != c){
				b = 1;
				st[j].push_back(n);
				break;
			}
		}
		if(!b){
			st.push_back({n});
		}
	}
	for(auto k : st){
		int lca = k[0];
		for(int j = 1; j<k.size(); j++){
			if(lca != k[j]){
				lca = Query(lca, k[j], c);
			}
		}
		//cout << min(lca, c) << " " << max(lca, c) << "\n"; 
		Bridge(min(lca, c), max(lca, c));
		rec(k);
	}
}

void Solve(int N) {
	vector<int> v;
	for(int i = 0; i<N; i++){
		v.push_back(i);
	}
	rec(v);
}

Compilation message (stderr)

meetings.cpp: In function 'void rec(std::vector<int>)':
meetings.cpp:22:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i<v.size(); i++){
                 ~^~~~~~~~~
meetings.cpp:28:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 0; j<st.size(); j++){
                  ~^~~~~~~~~~
meetings.cpp:41:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j = 1; j<k.size(); j++){
                  ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...