Pagini recente » Cod sursa (job #112209) | Cod sursa (job #2049478) | Cod sursa (job #85027) | Cod sursa (job #308109) | Cod sursa (job #2630371)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("alfa.in");
ofstream fout("alfa.out");
vector <pair <int, int>> v[101];
int val[101]; //-1 = aleg, 0 = nu participa, 1 = participa
int o[101]; //o = participantul de la care mi-a rezultat valoarea de adevar
int x;
int n;
bool gata;
bool dfs(int r)
{
int i;
bool ok = 1;
o[r] = x;
for (i = 0; i<v[r].size(); i++)
{
if (v[r][i].second == 0)
{
//fout << r;
if (o[v[r][i].first] == 0)
{
val[v[r][i].first] = 1 - val[r];
ok = dfs(v[r][i].first);
if (ok == 0)
return 0;
}
else if (val[v[r][i].first] == val[r])
return 0;
}
else if (v[r][i].second == 1)
{
if (val[r] == 0)
{
if (o[v[r][i].first] == 0)
{
val[v[r][i].first] = 0;
ok = dfs(v[r][i].first);
if (ok == 0)
return 0;
}
else if (val[v[r][i].first] == 1)
return 0;
}
}
else if (v[r][i].second == 2)
{
if (o[v[r][i].first] != 0)
{
if (val[r] == 1 && val[v[r][i].first] == 0)
return 0;
}
}
else
{
if (val[r] == 1)
{
if (o[v[r][i].first] == 0)
{
val[v[r][i].first] = 0;
ok = dfs(v[r][i].first);
if (ok == 0)
return 0;
}
else if (val[v[r][i].first] == 1)
return 0;
}
}
}
return 1;
}
void bkt(int k)
{
if (gata == 1)
return ;
int i, j;
bool ok;
for (i = k; i<=n; i++)
if (o[i] == 0)
{
val[i] = 1;
x = i;
ok = dfs(i);
if (ok == 1)
bkt(i+1);
if (gata == 1)
return ;
val[i] = 0;
//x = i;
for (j = k; j<=n; j++)
if (o[j] == x)
o[j] = 0;
ok = dfs(i);
if (ok == 1)
bkt(i+1);
//x = i;
for (j = k; j<=n; j++)
if (o[j] == x)
o[j] = 0;
break;
}
if (i > n) //adica am bagat toate valorile
gata = 1;
}
int main()
{
int m, i, x, y, t;
fin >> n >> m;
for (i = 1; i<=m; i++)
{
fin >> x >> y >> t;
if (t == 2)
swap(x, y);
if (t == 1 || t == 2)
{
v[x].push_back({y, 1});
v[y].push_back({x, 2});
}
else
{
v[x].push_back({y, t});
v[y].push_back({x, t});
}
}
bkt(1);
int nr = 0;
for (i = 1; i<=n; i++)
nr = nr + val[i];
fout << nr << '\n';
for (i = 1; i<=n; i++)
if (val[i] == 1)
fout << i << '\n';
return 0;
}