Cod sursa(job #1888456)

Utilizator danysilas23Silas Daniel danysilas23 Data 22 februarie 2017 09:29:25
Problema Andrei Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#include <vector>
#define Nmax 100002
#define Mmax 200002
#define x first
#define c second
#define pb push_back
#define mp make_pair
using namespace std;
vector< pair<int,int> > v[Nmax];
vector< int > v2;
int cul[Nmax],use[Nmax];
int n,m;
int color(int cine, int c){
vector< pair<int,int> >:: iterator it;
v2.pb(cine);
if( use[cine] )
if( cul[cine]==c ) return 1;
else return 0;
use[cine]=1;
cul[cine]=c;
for(it=v[cine].begin(); it!=v[cine].end(); ++it)
if( it->c == 2 && !color(it->x,c) )
return 0; else
if( it->c == c && !color(it->x,c^1) )
return 0;
return 1;
}
int main(){
int i,x,y,c;
vector< int >:: iterator it;
ifstream cin("andrei.in");
ofstream cout("andrei.out");
cin>>n>>m;
for(i=1;i<=m;++i){
cin>>x>>y>>c;
v[x].pb(mp(y,c));
v[y].pb(mp(x,c));
}
for(i=1;i<=n;++i)
if( ! use[i] ){
v2.clear();
if( ! color(i,0) ){
for(it=v2.begin(); it!=v2.end(); ++it)
use[*it]=0;
color(i,1);
}}
for(i=1;i<=n;++i) cout<<cul[i]<<" ";
return 0;
}