Pagini recente » Cod sursa (job #2449098) | Cod sursa (job #1545098) | Monitorul de evaluare | Cod sursa (job #1594868) | Cod sursa (job #2040987)
#include <bits/stdc++.h>
#define MAX_N 1024
#define MAX_M 1024
using namespace std;
FILE *f, *g;
int n, m;
///-1 nesigur
///1 suspect
///0 curat
char greu[MAX_N + 1];
char usor[MAX_N + 1];
int a[MAX_N + 1];
int b[MAX_N + 1];
bool ap[2][MAX_N + 1][MAX_N + 1];
int rz[MAX_M + 1];
void doGreu(int a[], int b[], int k)
{
int i;
for(i = 1; i <= k; i ++)
{
if(greu[a[i]] != 0)
greu[a[i]] = 1;
if(usor[b[i]] != 0)
usor[b[i]] = 1;
}
}
void readFile()
{
f = fopen("balanta.in", "r");
fscanf(f, "%d%d", &n, &m);
int i;
for(i = 1; i <= n; i ++)
greu[i] = usor[i] = -1;
int k;
for(i = 1; i <= m; i ++)
{
fscanf(f, "%d", &k);
int j;
for(j = 1; j <= k; j ++)
fscanf(f, "%d", &a[j]);
for(j = 1; j <= k; j ++)
fscanf(f, "%d", &b[j]);
for(j = 1; j <= k; j ++)
{
//cout << "BAGA " << j << " " << a[j] << " " << b[j] << "\n";
ap[0][i][a[j]] = 1;
ap[1][i][b[j]] = 1;
}
int rez;
fscanf(f, "%d", &rez);
rz[i] = rez;
if(rez == 0)
{
for(j = 1; j <= k; j ++)
{
usor[a[j]] = usor[b[j]] = 0;
greu[a[j]] = greu[b[j]] = 0;
}
}
if(rez == 1)
doGreu(a, b, k);
if(rez == 2)
doGreu(b, a, k);
}
fclose(f);
}
int rez;
bool verifU(int i, int rez)
{
if(rez == 0)
return 0;
int j;
for(j = 1; j <= m; j ++)
{
if(ap[0][j][i] || ap[1][j][i])
{
if(rz[j] == 0)
return 0;
if(rz[j] == 1 && ap[0][j][i] == 1)
return 0;
if(rz[j] == 2 && ap[1][j][i] == 1)
return 0;
}
else
if(rz[j] != 0)
return 0;
}
return 1;
}
bool verifG(int i, int rez)
{
if(rez == 0)
return 0;
int j;
for(j = 1; j <= m; j ++)
{/*
if(i == 4)
{
cout << j << " " << rz[j] << " " << ap[0][j][i] << " " << ap[1][j][i] << "\n";
}*/
if(ap[0][j][i] || ap[1][j][i])
{/*
if(i == 4)
{
cout << j << " " << rz[j] << " " << ap[0][j][i] << " " << ap[1][j][i] << "\n";
}*/
if(rz[j] == 0)
return 0;
if(rz[j] == 2 && ap[0][j][i] == 1)
return 0;
if(rz[j] == 1 && ap[1][j][i] == 1)
return 0;
}
else
if(rz[j] != 0)
return 0;
}
return 1;
}
void solve()
{
int aps = 0;
int i;
for(i = 1; i <= n; i ++)
{
if(verifU(i, usor[i]) == 1 || verifG(i, greu[i]) == 1)
{
aps ++;
// cout << i << " " << (int)greu[i] << " " << (int)usor[i] << " \n";
rez = i;
}
}
if(aps != 1)
rez = 0;
}
void printFile()
{
g = fopen("balanta.out", "w");
fprintf(g, "%d\n", rez);
fclose(g);
}
int main()
{
readFile();
solve();
printFile();
return 0;
}