Submission #1076925

#TimeUsernameProblemLanguageResultExecution timeMemory
1076925IgnutThousands Islands (IOI22_islands)C++17
24 / 100
58 ms14168 KiB
/* Ignut
started: 11.08.2024
now: 26.08.2024
████████████████████████████████████████████████████████████████████
████████████████████████████████    ████████████████████████████████
██████████████████████████████        ██████████████████████████████
██████      ██████████████████        ██████████████████      ██████
██████          ██████████████        ██████████████          ██████
██████      ██    ████████████        ████████████    ██      ██████
██████      ████    ██████████        ██████████    ████      ██████
██████      ████      ██████████    ██████████      ████      ██████
██████      ████      ██████████    ██████████    ██████      ██████
██████      ██████    ██████████    ██████████    ██████      ██████
██████      ██████    ████████        ████████    ██████      ██████
██████      ██████      ██████        ██████      ██████      ██████
██████      ████        ████            ████        ████      ██████
██████            ██████████    ████    ██████████            ██████
██████      ██      ██████    ████████    ██████      ██      ██████
██████      ██████            ████████            ██████      ██████
██████                    ██            ██                    ██████
██████████████████████      ████    ████      ██████████████████████
████████████████████████      ██    ██      ████████████████████████
██████████████████████████                ██████████████████████████
██████████████████████████████        ██████████████████████████████
████████████████████████████████████████████████████████████████████
*/

#include <bits/stdc++.h>
 
using namespace std;
using ll = long long;
 
const int MAXN = 1e5 + 123;
int n;
 
vector<pair<int, int>> g[MAXN];
int used[MAXN];

vector<int> order;
  
bool ans = false;

int startCycle = -1;

void dfs(int v) {
    if (ans) return;
    used[v] = 1;
    order.push_back(v);
    // cout << "go " << v << '\n';
    for (auto [to, e] : g[v]) {
        if (ans) return;
        if (used[to] == 2)
            continue;
        if (used[to] == 1) {
            // cout << "find cycle to " << to << '\n';
            ans = true;
            startCycle = to;
            return;
        }
        if (ans) return;
        dfs(to);
    }
    if (ans) return;
    used[v] = 2;
    // cout << "delete " << v << '\n';
    order.pop_back();
}
 
int cnt[MAXN] = {};
 
variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) {
    n = N;
    map<pair<int, int>, int> idx;
    for (int i = 0; i < M; i += 2) {
        g[U[i]].push_back({V[i], i});
        idx[{U[i], V[i]}] = i;
    }
    dfs(0);
    if (!ans) return false;

    vector<int> path, cycle;
    bool onC = false;
    for (int v : order) {
        if (v == startCycle) onC = true;
        if (onC) cycle.push_back(v);
        else path.push_back(v);
    }

    path.push_back(startCycle);
    // for (int v : path) cout << v << ' ';
    // cout << '\n';

    vector<int> res;
    for (int i = 1; i < path.size(); i ++)
        res.push_back(idx[{path[i - 1], path[i]}]);

    vector<int> ci;
    for (int i = 0; i < cycle.size(); i ++) {
        int u = cycle[i], v = cycle[(i + 1) % cycle.size()];
        ci.push_back(idx[{u, v}]);
    }
    for (int e : ci) res.push_back(e);
    for (int e : ci) res.push_back(e + 1);
    reverse(ci.begin(), ci.end());
    for (int e : ci) res.push_back(e);
    for (int e : ci) res.push_back(e + 1);

    for (int i = int(path.size()) - 1; i > 0; i --) {
        res.push_back(idx[{path[i - 1], path[i]}]);
    }

    return res;
}

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:94:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   94 |     for (int i = 1; i < path.size(); i ++)
      |                     ~~^~~~~~~~~~~~~
islands.cpp:98:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |     for (int i = 0; i < cycle.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...