Cod sursa(job #3348558)

Utilizator And_etcAndrei P And_etc Data 22 martie 2026 17:35:28
Problema Andrei Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <bits/stdc++.h>

using namespace std;

vector <int> v[200555];

vector <int> vv[200555];

vector <int> st;

int f[200555];

int ctc[200555],ct;

void bl(int k)
{
    f[k]=1;
    for(auto a:v[k])
    {
        if(f[a]==0)
        {
            bl(a);
        }
    }
    st.push_back(k);
}

void dfs(int k)
{
    ctc[k]=ct;
    f[k]=0;
    for(auto a:vv[k])
    {
        if(f[a]==1)
        {
            dfs(a);
        }
    }
}

int main()
{
    ifstream cin("andrei.in");
    ofstream cout("andrei.out");
    int n,m,x,y,c;
    cin>>n>>m;
    for(int i=1;i<=m;++i)
    {
        cin>>x>>y>>c;
        if(c==0)
        {
            v[x].push_back(y+n);
            vv[y+n].push_back(x);
            v[y].push_back(x+n);
            vv[x+n].push_back(y);

        }
        else if(c==1)
        {
            v[x+n].push_back(y);
            vv[y].push_back(x+n);
            v[y+n].push_back(x);
            vv[x].push_back(y+n);

        }
        else
        {
            v[x].push_back(y);
            vv[y].push_back(x);
            v[x+n].push_back(y+n);
            vv[y+n].push_back(x+n);
            v[y].push_back(x);
            vv[x].push_back(y);
            v[y+n].push_back(x+n);
            vv[x+n].push_back(y+n);
        }
    }
    for(int i=1;i<=2*n;++i)
    {
        if(f[i]==0)
        {
            bl(i);
        }
    }
    for(int h=st.size()-1;h>=0;--h)
    {
        if(f[st[h]]==1)
        {
            ++ct;
            dfs(st[h]);
        }
    }
    for(int i=1;i<=n;++i)
    {
        if(ctc[i]>ctc[i+n])
        {
            cout<<1<<" ";
        }
        else
        {
            cout<<0<<" ";
        }
    }
    return 0;
}