Cod sursa(job #1869332)

Utilizator ImGeluGelu Ungur ImGelu Data 5 februarie 2017 19:01:31
Problema Andrei Scor 0
Compilator cpp Status done
Runda becreative8 Marime 1.08 kb
#include <fstream>
#include <vector>

using namespace std;

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

struct muchie { int y, c; };
int n, m, i, j, k, x, y, c;
int care[100005];
vector <muchie> ls[100005];
vector <int> unde, viz;

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() {
    fin>>n>>m;
    for(int i=1; i<=m; i++){
        fin>>x>>y>>c;
        ls[x].push_back({y, c});
        ls[y].push_back({x, c});
    }

    for(int i=1; i<=n; i++)
        if(!viz[i]){ unde.clear();
            if(!df(i, 0)){
                int l=unde.size();
                for(int j=0; j<l; j++) viz[unde[j]] = 0;
                df(i, 1);
            }
        }

    for(int i=1; i<=n; i++) fout<<care[i]<<" ";

    return 0;
}