Cod sursa(job #3132470)

Utilizator user12345user user user user12345 Data 22 mai 2023 20:37:07
Problema Andrei Scor 5
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("andrei.in");
ofstream fout("andrei.out");

int n, m;
vector<pair<int, int>> g[100001];
bitset<100001> f;
set<char> sol[100001];

int main() {

    fin >> n >> m;

    for (int i = 1; i <= m; i++) {

        int x, y, type;
        fin >> x >> y >> type;

        g[x].push_back({y, type});
    }

    for (int i = 1; i <= n; i++)
        sol[i].insert('A'), sol[i].insert('B');

    do {

        int mini = 10, res = -1;

        for (int i = 1; i <= n; i++)
            if (!f[i] && sol[i].size() < mini)
                mini = sol[i].size(), res = i;

        if (mini == 10)
            break;

        f[res] = true;
        if (sol[res].size() == 2) {

            if (rand() & 1)
                sol[res].erase(--sol[res].end());
            else
                sol[res].erase(sol[res].begin());
        }
        char aux = *sol[res].begin();

        for (auto &i: g[res])
            if (i.second == 0) {

                if (aux == 'A')
                    sol[i.first].erase('A');
            }
            else if (i.second == 1) {

                if (aux == 'B')
                    sol[i.first].erase('B');
            }
            else if (i.second == 2) {

                if (aux == 'A')
                    sol[i.first].erase('B');
                else
                    sol[i.first].erase('A');
            }

    } while (true);

    for (int i = 1; i <= n; i++)
        if (*sol[i].begin() == 'A')
            fout << "0 ";
        else
            fout << "1 ";

    return 0;
}