Cod sursa(job #3345319)

Utilizator CheeseEaterHackRoman Alex CheeseEaterHack Data 9 martie 2026 10:51:30
Problema Party Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("party.in");
ofstream fout("party.out");

int disc[202], low[202], cnt, comp[202];
vector<int> graf[202], rez;
int n, m, a, b, c, timer;
stack<int> st;
bool inStack[202];

void dfs(int nod)
{
    timer++;
    disc[nod]=low[nod]=timer;
    inStack[nod]=true;
    st.push(nod);
    for (auto vec: graf[nod])
    {
        if (disc[vec]==0)
        {
            dfs(vec);
            low[nod]=min(low[nod], low[vec]);
        }
        else if (inStack[vec])
        {
            low[nod]=min(low[nod], disc[vec]);
        }
    }
    if (low[nod]==disc[nod])//am gasit radacina la SCC
    {
        cnt++;
        while (true)
        {
            int nd=st.top();
            st.pop();
            inStack[nd]=false;
            comp[nd]=cnt;
            if (nd==nod)
            {
                break;
            }
        }
    }
}

int main()
{
    fin>>n>>m;
    for (int i=1; i<=m; i++)
    {
        fin>>a>>b>>c;
        if (c==0)
        {
            graf[a+n].push_back(b);
            graf[b+n].push_back(a);
        }
        else if (c==1)
        {
            graf[a+n].push_back(b+n);
            graf[b].push_back(a);
        }
        else if (c==2)
        {
            graf[b+n].push_back(a+n);
            graf[a].push_back(b);
        }
        else
        {
            graf[a].push_back(b+n);
            graf[b].push_back(a+n);
        }
    }
    for (int i=1; i<=2*n; i++)
    {
        if (disc[i]==0)
        {
            dfs(i);
        }
    }
    for (int i=1; i<=n; i++)
    {
        if (comp[i]==comp[i+n])
        {
            fout<<0<<'\n';
            return 0;
        }
        if (comp[i]<comp[i+n])
        {
            rez.push_back(i);
        }
    }
    fout<<rez.size()<<'\n';
    for (int i=0; i<rez.size(); i++)
    {
        fout<<rez[i]<<'\n';
    }

    return 0;
}