Submission #1173659

#TimeUsernameProblemLanguageResultExecution timeMemory
1173659SpyrosAliv수천개의 섬 (IOI22_islands)C++20
5 / 100
1138 ms1866024 KiB
#include <bits/stdc++.h>
using namespace std;

int n, m;
vector<int> u, v;
vector<vector<int>> av;
bool cycle;
vector<bool> vis;

void dfs(int node) {
    if (cycle) return;
    vis[node] = true;
    vector<int> targs;
    for (int i = 1; i < (int)av[node].size(); i++) {
        targs.push_back(v[av[node][i]]);
    }
    sort(targs.begin(), targs.end());
    int s = targs.size();
    for (int i = 1; i < s; i++) {
        if (targs[i] == targs[i-1] || vis[targs[i]]) {
            cycle = true;
            return;
        }
    }
    for (int i = 0; i < s; i++) {
        dfs(targs[i]);
        if (cycle) return;
    }
}

variant<bool, vector<int>> find_journey(int N, int M, vector<int> U, vector<int> V) {
    // tree -> impossible
    n = N;
    m = M;
    u = U;
    v = V;
    av.clear();
    av.resize(n);
    vis.assign(n, false);
    for (int i = 0; i < m; i++) {
        av[u[i]].push_back(i);
    }
    cycle = false;
    dfs(0);
    if (n == 2) {
        int cnt1 = 0, cnt2 = 0;
        vector<int> a, b;
        for (int i = 0; i < m; i++) {
            if (u[i] == 0) {
                cnt1++;
                a.push_back(i);
            }
            else {
                cnt2++;
                b.push_back(i);
            }
        }
        if (cnt1 < 2 || cnt2 < 1) return false;
        vector<int> ans = {a[0], b[0], a[1], a[0], b[0], a[1]};
        return ans;
    }
    else {
        vector<int> goB, goC, b, c;
        for (int i = 0; i < m; i++) {
            if (u[i] == 0) {
                if (v[i] == 1) goB.push_back(i);
                else if (v[i] == 2) goC.push_back(i);
            }
            else if (u[i] == 1 && v[i] == 0) b.push_back(i);
            else if (u[i] == 2 && v[i] == 0) c.push_back(i);
        }
        if (goB.size() && goC.size() && b.size() && c.size()) {
            vector<int> ans = {goB[0], b[0], goC[0], c[0], b[0], goB[0], c[0], goC[0]};
            return ans;
        }
    }
    if (!cycle) return false;
}

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:78:1: warning: control reaches end of non-void function [-Wreturn-type]
   78 | }
      | ^
#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...