Pagini recente » Cod sursa (job #3301472) | Cod sursa (job #2806302) | Cod sursa (job #2498804) | Cod sursa (job #1004967) | Cod sursa (job #3345319)
#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;
}