Pagini recente » Cod sursa (job #1705538) | Cod sursa (job #387673) | Cod sursa (job #2509063) | Cod sursa (job #173109) | Cod sursa (job #881266)
Cod sursa(job #881266)
#include <fstream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
#define MAX_N 2000
int v[MAX_N], x[MAX_N], y[MAX_N], c[MAX_N];
int valid(int i)
{
switch(c[i])
{
case 0: return v[x[i]] || v[y[i]]; break;
case 1: return v[x[i]] || !v[y[i]]; break;
case 2: return v[y[i]] || !v[x[i]]; break;
case 3: return v[x[i]]+v[y[i]] != 2;
}
return 1;
}
void random(int i)
{
int r = rand()%2; r++;
if(r == 1)
v[x[i]] = !v[x[i]];
if(r == 2)
v[y[i]] = !v[y[i]];
}
int main()
{
ifstream in("party.in");
ofstream out("party.out");
int i, n, m, nr=0;
//Read
in>>n>>m;
for(i=1; i<=m; i++)
in>>x[i]>>y[i]>>c[i];
//Compute
for(i=1; i<=n; i++)
v[i] = 1;
while(1)
{
for(i=1; i<=m; i++)
if(valid(i) == 0)
{
random(i);
break;
}
if(i == m+1)
break;
}
//Print
for(i=1; i<=n; i++)
if(v[i])
nr++;
out<<nr<<'\n';
for(i=1; i<=n; i++)
if(v[i])
out<<i<<'\n';
}