Submission #628554

#TimeUsernameProblemLanguageResultExecution timeMemory
628554SortingThousands Islands (IOI22_islands)C++17
31 / 100
46 ms5152 KiB
#include "islands.h" #include <variant> #include <vector> #include <algorithm> #include <cmath> using namespace std; std::variant<bool, std::vector<int>> find_journey( int n, int m, std::vector<int> u, std::vector<int> v) { if(n == 2){ vector<int> cnt[2]{}; for(int i = 0; i < u.size();++i){ cnt[u[i]].push_back(i); } if(cnt[0].size() >= 2 && cnt[1].size() >= 1){ return vector<int>{cnt[0][0], cnt[1][0], cnt[0][1], cnt[0][0], cnt[1][0], cnt[0][1]}; } return false; } vector<vector<pair<int, int>>> adj(n); for(int i = 0; i < m; ++i) adj[u[i]].push_back({v[i], i}); vector<int> ans; int x = 0, par = -1; while(true){ if(adj[x].size() != 1 + (x != 0)){ if(adj[x].size() < 1 + (x != 0)){ return false; } int len = ans.size(); pair<int, int> to_1{-1, -1}, to_2{-1, -1}; for(auto p: adj[x]){ if(p.first == par){ continue; } if(to_1.first == -1) to_1 = p; else to_2 = p; } if(to_1.first == to_2.first){ pair<int, int> back_1{-1, -1}, back_2{-1, -1}; for(auto p: adj[to_1.first]){ if(p.first != x){ continue; } if(back_1.first == -1) back_1 = p; else back_2 = p; } ans.push_back(to_1.second); ans.push_back(back_1.second); ans.push_back(to_2.second); ans.push_back(to_1.second); ans.push_back(back_1.second); ans.push_back(to_2.second); } else{ pair<int, int> back_1{-1, -1}, back_2{-1, -1}; for(auto p: adj[to_1.first]){ if(p.first != x) continue; back_1 = p; break; } for(auto p: adj[to_2.first]){ if(p.first != x) continue; back_2 = p; break; } ans.push_back(to_1.second); ans.push_back(back_1.second); ans.push_back(to_2.second); ans.push_back(back_2.second); ans.push_back(back_1.second); ans.push_back(to_1.second); ans.push_back(back_2.second); ans.push_back(to_2.second); } for(int i = len - 1; i >= 0; --i) ans.push_back(ans[i]); return ans; } for(auto p: adj[x]){ int to = p.first; int idx = p.second; if(to == par){ par = -1; continue; } par = x; x = to; ans.push_back(idx); break; } } }

Compilation message (stderr)

islands.cpp: In function 'std::variant<bool, std::vector<int, std::allocator<int> > > find_journey(int, int, std::vector<int>, std::vector<int>)':
islands.cpp:14:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |         for(int i = 0; i < u.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...
#Verdict Execution timeMemoryGrader output
Fetching results...