Submission #1032243

#TimeUsernameProblemLanguageResultExecution timeMemory
10322430npataSwapping Cities (APIO20_swap)C++17
100 / 100
298 ms51096 KiB
#include "swap.h" #include<bits/stdc++.h> using namespace std; #define vec vector const int N = 100005; vec<pair<int, int>> hist[N]; vec<int> okt(N, -1); const int INF = 1e9+5; struct Comp { pair<int, int> eps; vec<int> vs; }; void init(int N, int M, std::vector<int> U, std::vector<int> V, std::vector<int> W) { vec<Comp> comps(N); for(int i = 0; i<N; i++) { comps[i] = {{i, i}, {i}}; hist[i] = {{i, 0}}; } set<pair<int, pair<int, int>>> edges; for(int i = 0; i<M; i++) { edges.insert({W[i], {U[i], V[i]}}); } vec<int> ci(N); iota(ci.begin(), ci.end(), 0); auto upd = [&](int i, int w) { if(okt[i] != -1) return; okt[i] = w; }; for(auto [weight, eps] : edges) { auto [u, v] = eps; if(ci[u] == ci[v]) { upd(ci[u], weight); continue; } if(comps[ci[u]].vs.size() < comps[ci[v]].vs.size()) swap(u, v); if(u == comps[ci[u]].eps.second) swap(comps[ci[u]].eps.first, comps[ci[u]].eps.second); if(v == comps[ci[v]].eps.second) swap(comps[ci[v]].eps.first, comps[ci[v]].eps.second); if(okt[ci[v]] == -1 && u == comps[ci[u]].eps.first && v == comps[ci[v]].eps.first) { comps[ci[u]].eps = {comps[ci[u]].eps.second, comps[ci[v]].eps.second}; } else { upd(ci[u], weight); } for(int w : comps[ci[v]].vs) { ci[w] = ci[u]; comps[ci[u]].vs.push_back(w); hist[w].push_back({ci[u], weight}); } } for(int i = 0; i<N; i++) { hist[i].push_back({-1, INF}); } } int getMinimumFuelCapacity(int X, int Y) { int i = 0; int j = 0; //cerr << okt[1] << '\n'; while(i<hist[X].size() && j < hist[Y].size()) { if(hist[X][i].first == hist[Y][j].first && okt[hist[X][i].first] != -1) { return max(max(hist[X][i].second, hist[Y][j].second), okt[hist[X][i].first]); } if(hist[X][i+1].second < hist[Y][j+1].second) { i++; } else { j++; } } return -1; }

Compilation message (stderr)

swap.cpp: In function 'int getMinimumFuelCapacity(int, int)':
swap.cpp:78:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |  while(i<hist[X].size() && j < hist[Y].size()) {
      |        ~^~~~~~~~~~~~~~~
swap.cpp:78:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |  while(i<hist[X].size() && j < hist[Y].size()) {
      |                            ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...