Submission #517313

#TimeUsernameProblemLanguageResultExecution timeMemory
517313KoDChecker (COCI19_checker)C++17
110 / 110
495 ms31088 KiB
#include <bits/stdc++.h>

using std::vector;
using std::array;
using std::pair;
using std::tuple;

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int N;
    std::cin >> N >> N;
    std::map<pair<int, int>, int> col;
    vector<int> next(N), prev(N);
    for (int i = 0; i < N; ++i) {
        next[i] = i + 1 == N ? 0 : i + 1;
        prev[i] = i == 0 ? N - 1 : i - 1;
        char c;
        std::cin >> c;
        col.emplace(std::minmax(i, next[i]), c - '0');
    }   
    vector<int> deg(N, 2);
    for (int i = 0; i < N - 3; ++i) {
        int u, v, c;
        std::cin >> u >> v >> c;
        u -= 1, v -= 1;
        deg[u] += 1, deg[v] += 1;
        col.emplace(std::minmax(u, v), c);
    }
    const auto get_col = [&](const int u, const int v) {
        auto itr = col.find(std::minmax(u, v));
        return itr == col.end() ? 0 : itr->second;
    };
    std::queue<int> que;
    for (int i = 0; i < N; ++i) {
        if (deg[i] == 2) {
            que.push(i);
        }
    }
    bool triangle = true, color = true;
    while (!que.empty()) {
        int u = que.front();
        que.pop();
        if (deg[u] != 2) {
            continue;
        }
        const int v = prev[u], w = next[u];
        const int a = get_col(u, v), b = get_col(v, w), c = get_col(w, u);
        if (a == 0 or b == 0 or c == 0) {
            triangle = false;
            break;
        }
        if ((a - b) * (b - c) * (c - a) == 0 or a + b + c != 6) {
            color = false;
        }
        next[v] = w, prev[w] = v;
        deg[v] -= 1, deg[w] -= 1;
        if (deg[v] == 2) {
            que.push(v);
        }
        if (deg[w] == 2) {
            que.push(w);
        }
    }
    if (!triangle) {
        std::cout << "neispravna triangulacija\n";
    } else if (!color) {
        std::cout << "neispravno bojenje\n";
    } else {
        std::cout << "tocno\n";
    }
    return 0;
}
#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...