Pagini recente » Cod sursa (job #2810179) | Cod sursa (job #2494798) | Cod sursa (job #844941) | Cod sursa (job #305426) | Cod sursa (job #1888447)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream f("andrei.in");
ofstream g("andrei.out");
struct muchie {
int y, c;
};
int n, m, i, j, k, x, y, c;
int care[100005];
bitset <100005> viz;
vector <muchie> ls[100005];
vector <int> unde;
bool df(int x, int culoare) {
unde.push_back(x);
if (viz[x])
return care[x] == culoare;
viz[x] = 1;
care[x] = culoare;
int i, l = ls[x].size(), y, c;
for (i = 0; i < l; i++) {
y = ls[x][i].y;
c = ls[x][i].c;
if (c == 2 && !df(y, culoare))
return 0;
else if (c == culoare && !df(y, culoare^1))
return 0;
}
return 1;
}
int main() {
f >> n >> m;
while (m--) {
f >> x >> y >> c;
ls[x].push_back({y, c});
ls[y].push_back({x, c});
}
for (i = 1; i <= n; i++)
if (!viz[i]) {
unde.clear();
if (!df(i, 0)) {
int l = unde.size();
for (j = 0; j < l; j++)
viz[unde[j]] = 0;
df(i, 1);
}
}
for (i = 1; i <= n; i++)
g << care[i] << ' ';
return 0;
}