Pagini recente » Cod sursa (job #1887550) | Cod sursa (job #1783366) | Cod sursa (job #2458199) | Cod sursa (job #2847183) | Cod sursa (job #1292242)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstdlib>
#include <ctime>
#define TRUE 1
#define FALSE 0
#define NONE 2
int m, n, vars[101];
int main()
{
srand(time(NULL));
std::ifstream in("party.in");
std::ofstream out("party.out");
in >> n >> m;
std::vector<std::pair<int, int> > v;
for (int i = 0; i < m; ++i) {
int a, b, type;
in >> a >> b >> type;
switch (type) {
case 0: v.push_back(std::make_pair(a, b)); break;
case 1: v.push_back(std::make_pair(a, -b)); break;
case 2: v.push_back(std::make_pair(-a, b)); break;
case 3: v.push_back(std::make_pair(-a, -b)); break;
}
}
int ntrue = 0;
for (int i = 1; i <= n; ++i) {
vars[i] = rand() % 2;
ntrue += vars[i];
}
bool all_satisfied;
do {
all_satisfied = true;
for (int i = 0; i < v.size(); ++i) {
if (!((v[i].first > 0 ? vars[v[i].first] : !vars[v[i].first]) ||
(v[i].second > 0 ? vars[v[i].second] : !vars[v[i].second]))) {
all_satisfied = false;
if (rand() % 2 == 0) {
ntrue -= vars[v[i].first];
vars[v[i].first] ^= 1;
ntrue += vars[v[i].first];
} else {
ntrue -= vars[v[i].second];
vars[v[i].second] ^= 1;
ntrue += vars[v[i].second];
}
break;
}
}
} while (!all_satisfied || ntrue == 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;
}