Pagini recente » Cod sursa (job #2048124) | Borderou de evaluare (job #103667) | Cod sursa (job #1552022) | Cod sursa (job #1393345) | Cod sursa (job #1292104)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>
#define TRUE 1
#define FALSE 0
#define NONE 2
int vars[101];
bool expanded[101];
std::vector<int> neigh[101][2];
void gen(int node) {
if (expanded[node]) return;
expanded[node] = true;
std::vector<int>& lneigh = neigh[node][vars[node]];
for (int i = 0; i < lneigh.size(); ++i) {
if (lneigh[i] > 0) {
if (vars[lneigh[i]] == FALSE) {
exit(0);
}
vars[lneigh[i]] = TRUE;
gen(lneigh[i]);
} else {
if (vars[-lneigh[i]] == TRUE) {
exit(0);
}
vars[-lneigh[i]] = FALSE;
gen(-lneigh[i]);
}
}
}
int main()
{
std::ifstream in("party.in");
std::ofstream out("party.out");
int n, m;
in >> n >> m;
for (int i = 0; i < m; ++i) {
int a, b, type;
in >> a >> b >> type;
switch (type) {
case 0: neigh[a][0].push_back(b); neigh[b][0].push_back(a); break;
case 1: neigh[a][0].push_back(-b); neigh[b][1].push_back(a); break;
case 2: neigh[a][1].push_back(b); neigh[b][0].push_back(-a); break;
case 3: neigh[a][1].push_back(-b); neigh[b][1].push_back(-a); break;
}
}
for (int i = 1; i <= n; ++i) vars[i] = NONE;
for (int i = 1; i <= n; ++i) {
if (vars[i] == NONE) {
vars[i] = TRUE;
gen(i);
}
}
int ntrue = 0;
for (int i = 1; i <= n; ++i) ntrue += (vars[i] == TRUE ? 1 : 0);
out << ntrue << std::endl;
for (int i = 1; i <= n; ++i)
if (vars[i] == TRUE) out << i << std::endl;
in.close();
out.close();
return 0;
}