Cod sursa(job #3232140)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 29 mai 2024 08:53:56
Problema Party Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
//incomplet
#include <bits/stdc++.h>

using namespace std;
ifstream fin("party.in");
ofstream fout("party.out");
vector <int> G[205];
vector < vector <int> > GT(205);
bitset <205> viz;
int comp[205];
int val[205];
vector <int> ord;
void dfs(int nod){
    viz[nod] = 1;
    for(auto x : G[nod]){
        if(!viz[x]) dfs(x);
    }
    ord.push_back(nod);
}
int t;
void dfs2(int nod){
    comp[nod] = t;
    for(auto x : GT[nod]){
        if(!comp[x]) dfs2(x);
    }
}

int main()
{
    int n,i,m,u,v,e;
    fin >> n >> m;
    while(m--){
        fin >> u >> v >> e;
        if(e & 2) u = -u;
        if(e & 1) v = -v;
        if(u < 0) u = ((-u - 1) << 1) + 1;
        else u = ((u - 1) << 1);
        if(v < 0) v = ((-v - 1) << 1) + 1;
        else v = ((v - 1) << 1);
        G[u ^ 1].push_back(v);
        G[v ^ 1].push_back(u);
        GT[u].push_back(v ^ 1);
        GT[v].push_back(u ^ 1);
    }
//    for(i = 0; i < (n << 1); i++){
//        for(auto x : G[i]) fout << x << " ";
//        fout << "\n";
//    }
    for(i = 0; i < (n << 1); i++){
        if(!viz[i]) dfs(i);
    }
    reverse(ord.begin(), ord.end());
    for(auto x : ord){
        if(!comp[x]){
            t++;
            dfs2(x);
        }
    }
    for(i = 0; i < (n << 1); i += 2) val[(i >> 1)] = comp[i] > comp[i + 1];
    t = 0;
    for(i = 0; i < n; i++){
        if(val[i]) t++;
    }
    fout << t << "\n";
    for(i = 0; i < n; i++){
        if(val[i]) fout << i + 1 << "\n";
    }
}