Pagini recente » Cod sursa (job #2882476) | Cod sursa (job #1116946) | Cod sursa (job #1120468) | Cod sursa (job #1121646) | Cod sursa (job #2107330)
#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()
{
vector <int> :: iterator it;
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 (it=st.begin (); it!=st.end (); ++it)
viz[*it]=0;
dfs(j,1);
}
}
}
for(int k=1;k<=n;++k) out<<culoare[k]<<' ';
return 0;
}