Pagini recente » Cod sursa (job #1327925) | Cod sursa (job #2032491) | Cod sursa (job #2067439) | Cod sursa (job #1069385) | Cod sursa (job #3132471)
#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;
}