Cod sursa(job #2107326)

Utilizator edynator34Nechitoaia George-Edward edynator34 Data 16 ianuarie 2018 23:45:33
Problema Andrei Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>
#define MM 200005
using namespace std;
ifstream in("andrei.in");
ofstream out("andrei.out");
vector <pair<int,int> > v[MM];
int x,y,c,n,m;
vector <int> st;
int viz[MM],culoare[MM];

int dfs(int nod, int mul){
    st.push_back(nod);
    if(viz[nod]){
        if(culoare[nod]!=mul) return false;
        else return true;

    }
    viz[nod]=true;
    culoare[nod]=mul;
    vector <pair < int, int> > ::iterator it;
    for(it=v[nod].begin() ; it!=v[nod].end() ; ++it){
        if(it->second==0 && mul==0){
            if(!dfs(it->first,1)) return false;
        }
        else if(it->second==1 && mul==1){
            if(!dfs(it->first,0)) return false;
        }
        else if(it->second==2){
            if(!dfs(it->first,mul)) return false;
        }
    }
    return true;
}

int main()
{
    in>>n>>m;
    for(int i=1;i<=m;++i){
        in>>x>>y>>c;
        v[x].push_back(make_pair(y,c));
        v[y].push_back(make_pair(x,c));
    }
    for(int j=1;j<=n;++j){
        if(!viz[j]){
            st.clear();
            if(!dfs(j,0)){

            }
        }
    }
    for(int k=1;k<=n;++k) out<<culoare[k]<<' ';
        return 0;
}