Cod sursa(job #2371530)
Utilizator | Data | 6 martie 2019 18:08:20 | |
---|---|---|---|
Problema | Andrei | Scor | 10 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 7.25 kb |
//
// main.cpp
// andrei
//
// Created by Mihai Tenea on 06/03/2019.
// Copyright © 2019 Mihai Tenea. All rights reserved.
//
#include <iostream>
#include <fstream>
#include <queue>
#include <bitset>
using namespace std;
const int NMAX = 100002;
queue < pair < bitset < NMAX > , bitset < NMAX > > > sol;
bitset < NMAX > tmp;
int main() {
ifstream f("andrei.in");
ofstream g("andrei.out");
int n, m; f >> n >> m;
sol.push({tmp, tmp});
for(int i = 1, x, y, c; i <= m; i++)
{
f >> x >> y >> c;
unsigned long t = sol.size();
for(unsigned long j = 0; j < t; j++)
{
auto a = sol.front().first, b = sol.front().second;
sol.pop();
if(c == 0) {
if(a[x] && a[y])
continue;
if(!a[x] && !b[y] && !a[y] && !b[x])
{
a[x] = 1; b[y] = 1;
sol.push({a, b});
a[x] = 0; b[y] = 0;
a[y] = 1; b[x] = 1;
sol.push({a, b});
a[y] = 0; b[x] = 0;
b[x] = 1; b[y] = 1;
sol.push({a, b});
b[x] = 0; b[y] = 0;
}
if(a[x])
{
if(!b[y])
{
b[y] = 1;
sol.push({a, b});
b[y] = 0;
}
else
sol.push({a, b});
}
else if(a[y])
{
if(!b[x])
{
b[x] = 1;
sol.push({a, b});
b[x] = 0;
}
else
sol.push({a, b});
}
else if(b[x])
{
if(!a[y])
{
a[y] = 1;
sol.push({a, b});
a[y] = 0;
}
else
sol.push({a, b});
if(!b[y])
{
b[y] = 1;
sol.push({a, b});
b[y] = 0;
}
else
sol.push({a, b});
}
else if(b[y])
{
if(!a[x])
{
a[x] = 1;
sol.push({a, b});
a[x] = 0;
}
else
sol.push({a, b});
if(!b[x])
{
b[x] = 1;
sol.push({a, b});
b[x] = 0;
}
else
sol.push({a, b});
}
}
else if(c == 1)
{
if(b[x] && b[y])
continue;
if(!a[x] && !b[y] && !a[y] && !b[x])
{
a[x] = 1; b[y] = 1;
sol.push({a, b});
a[x] = 0; b[y] = 0;
a[y] = 1; b[x] = 1;
sol.push({a, b});
a[y] = 0; b[x] = 0;
a[x] = 1; a[y] = 1;
sol.push({a, b});
a[x] = 0; a[y] = 0;
}
if(b[x])
{
if(!a[y])
{
a[y] = 1;
sol.push({a, b});
a[y] = 0;
}
else
sol.push({a, b});
}
else if(b[y])
{
if(!a[x])
{
a[x] = 1;
sol.push({a, b});
a[x] = 0;
}
else
sol.push({a, b});
}
else if(a[x])
{
if(!a[y])
{
a[y] = 1;
sol.push({a, b});
a[y] = 0;
}
else
sol.push({a, b});
if(!b[y])
{
b[y] = 1;
sol.push({a, b});
b[y] = 0;
}
else
sol.push({a, b});
}
else if(a[y])
{
if(!a[x])
{
a[x] = 1;
sol.push({a, b});
a[x] = 0;
}
else
sol.push({a, b});
if(!b[x])
{
b[x] = 1;
sol.push({a, b});
b[x] = 0;
}
else
sol.push({a, b});
}
}
else if(c == 2)
{
if((a[x] && b[y]) || (a[y] && b[x]))
continue;
if(!a[x] && !b[y] && !a[y] && !b[x])
{
a[x] = 1; a[y] = 1;
sol.push({a, b});
a[x] = 0; a[y] = 0;
b[x] = 1; b[y] = 1;
sol.push({a, b});
b[x] = 0; b[y] = 0;
}
if(a[x])
{
if(!a[y])
{
a[y] = 1;
sol.push({a, b});
a[y] = 0;
}
else
sol.push({a, b});
}
else if(a[y])
{
if(!a[x])
{
a[x] = 1;
sol.push({a, b});
a[x] = 0;
}
else
sol.push({a, b});
}
else if(b[x])
{
if(!b[y])
{
b[y] = 1;
sol.push({a, b});
b[y] = 0;
}
else
sol.push({a, b});
}
else if(b[y])
{
if(!b[x])
{
b[x] = 1;
sol.push({a, b});
b[x] = 0;
}
else
sol.push({a, b});
}
}
}
}
auto b = sol.front().second;
for(int i = 1; i <= n; i++)
g << b[i] << ' ';
g << '\n';
f.close();
g.close();
return 0;
}