Pagini recente » Cod sursa (job #1587566) | Cod sursa (job #1610751) | Cod sursa (job #429944) | Cod sursa (job #858751) | Cod sursa (job #1738555)
#include <fstream>
#include <iostream>
#include <vector>
#define DIM 300
using namespace std;
int sol[DIM], v[DIM];
vector<int> L[DIM];
int n, m, nr, index, lev[DIM], low[DIM], st[DIM], varf, x, y, z, in[DIM], is[DIM];
inline int Minus(int x) {
if (x <= n)
return n+x;
else
return x-n;
}
void tarjan(int nod) {
index ++;
lev[nod] = index;
low[nod] = index;
st[++varf] = nod;
v[nod] = 1;
is[nod] = 1;
for (int i=0;i<L[nod].size();i++) {
int vecin = L[nod][i];
if (v[vecin] == 0) {
tarjan(vecin);
low[nod] = min(low[nod], low[vecin]);
} else
if (is[vecin])
low[nod] = min(low[nod], low[vecin]);
}
if (low[nod] == lev[nod]) {
do {
x = st[varf--];
is[x] = 0;
if (sol[x] == 0) {
sol[x] = 1;
sol[Minus(x)] = 2;
}
} while(x != nod);
}
}
int main () {
ifstream fin ("party.in");
ofstream fout("party.out");
fin>>n>>m;
for (int i=1;i<=m;i++) {
fin>>x>>y>>z;
if (z == 0) {
L[Minus(x)].push_back(y);
L[Minus(y)].push_back(x);
in[x] = 1;
in[y] = 1;
} else
if (z == 1) {
L[Minus(x)].push_back(Minus(y)), in[ Minus(y) ] = 1;
L[y].push_back(x), in[ x ] = 1;
}
else
if (z == 2) {
L[Minus(y)].push_back(Minus(x)), in[ Minus(x) ] = 1;
L[x].push_back(y), in[ y ] = 1;
} else {
L[x].push_back(Minus(y)), in[Minus(y)] = 1;
L[y].push_back(Minus(x)), in[Minus(x)] = 1;
}
}
/*
for (int i=1;i<=2*n;i++) {
cout<<i<<": ";
for (int j=0;j<L[i].size();j++)
cout<<L[i][j]<<" ";
cout<<"\n";
}
*/
for (int i=1;i<=n+n;i++)
if (v[i] == 0) {
tarjan(i);
}
for (int i=1;i<=n;i++)
if (sol[i] == 1) {
nr++;
}
fout<<nr<<"\n";
for (int i=1;i<=n;i++)
if (sol[i] == 1) {
fout<<i<<"\n";
}
return 0;
}