Submission #131126

#TimeUsernameProblemLanguageResultExecution timeMemory
131126IOrtroiiiMeetings (JOI19_meetings)C++14
100 / 100
1595 ms1068 KiB
#include <bits/stdc++.h>
#include "meetings.h"
using namespace std;

mt19937 rng(10072002);

void addEdge(int u, int v) {
   if (u > v) swap(u, v);
   Bridge(u, v);
}

void go(int from, vector<int> comp) {
   int id = rng() % (comp.size());
   int to = comp[id];
   swap(comp[id], comp.back());
   comp.pop_back();
   vector<int> path;
   vector<pair<int, int>> vals;
   for (int v : comp) {
      int u = Query(from, to, v);
      if (u == v) {
         path.push_back(v);
      } else {
         vals.emplace_back(u, v);
      }
   }
   if (path.empty()) {
      addEdge(from, to);
   } else {
      sort(path.begin(), path.end(), [&](int x, int y) {
         return Query(from, x, y) == x;
      });
      addEdge(from, path[0]);
      for (int i = 0; i + 1 < path.size(); ++i) {
         addEdge(path[i], path[i + 1]);
      }
      addEdge(path.back(), to);
   }
   sort(vals.begin(), vals.end());
   int l = 0;
   while (l < vals.size()) {
      vector<int> ncomp;
      int r = l;
      while (r < vals.size() && vals[l].first == vals[r].first) {
         ncomp.push_back(vals[r++].second);
      }
      go(vals[l].first, ncomp);
      l = r;
   }
}

void Solve(int n) {
   vector<int> comp(n - 1);
   iota(comp.begin(), comp.end(), 1);
   go(0, comp);
}

Compilation message (stderr)

meetings.cpp: In function 'void go(int, std::vector<int>)':
meetings.cpp:34:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for (int i = 0; i + 1 < path.size(); ++i) {
                       ~~~~~~^~~~~~~~~~~~~
meetings.cpp:41:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    while (l < vals.size()) {
           ~~^~~~~~~~~~~~~
meetings.cpp:44:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       while (r < vals.size() && vals[l].first == vals[r].first) {
              ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...