Cod sursa(job #2371530)

Utilizator rexlcdTenea Mihai rexlcd 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;
}