Cod sursa(job #25398)
Utilizator | Data | 4 martie 2007 12:27:14 | |
---|---|---|---|
Problema | Balanta | Scor | 100 |
Compilator | cpp | Status | done |
Runda | preONI 2007, Runda 3, Clasa a 10-a | Marime | 4.97 kb |
#include <cstdio>
#define dim 1024
int A[dim][dim], C[dim], R[dim], Good[dim];
int N, M;
int main()
{
freopen("balanta.in", "r", stdin);
freopen("balanta.out", "w", stdout);
scanf("%d %d", &N, &M);
int i, j, k;
for(i=0; i<M; ++i)
{
scanf("%d", C+i);
for(j=0; j<(C[i]<<1); ++j)
scanf("%d", &A[i][j]);
scanf("%d", R+i);
if( !R[i] )
for(j=0; j<(C[i]<<1); ++j)
Good[ A[i][j] ] = 1;
}
for(i=0; i<M; ++i)
{
if( R[i] )
{
int good = 0, m, found;
for(j=0; j<(C[i]<<1); ++j)
{
good += Good[ A[i][j] ];
if( !Good[ A[i][j] ] )
m = A[i][j];
}
if( good == ((C[i]<<1)-1) )
{
printf("%d", m);
return 0;
}
else if( C[i] == 1 )
{
for(j=0; j<M; ++j)
if( i != j )
{
if( R[j] == 1 )
{
found = 0;
for(k=0; k<C[j]; ++k)
if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
++ found;
if( found == 2 )
{
if( R[i] == 1 )
printf("%d", A[i][0]);
if( R[i] == 2 )
printf("%d", A[i][1]);
return 0;
}
found = 0;
for(k=C[j]; k<(C[j]<<1); ++k)
if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
++ found;
if( found == 2 )
{
if( R[i] == 1 )
printf("%d", A[i][1]);
if( R[i] == 2 )
printf("%d", A[i][0]);
return 0;
}
}
else if( R[j] == 2 )
{
found = 0;
for(k=0; k<C[j]; ++k)
if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
++ found;
if( found == 2 )
{
if( R[i] == 1 )
printf("%d", A[i][1]);
if( R[i] == 2 )
printf("%d", A[i][0]);
return 0;
}
found = 0;
for(k=C[j]; k<(C[j]<<1); ++k)
if( A[j][k] == A[i][0] || A[j][k] == A[i][1] )
++ found;
if( found == 2 )
{
if( R[i] == 1 )
printf("%d", A[i][0]);
if( R[i] == 2 )
printf("%d", A[i][1]);
return 0;
}
}
}
}
}
}
printf("0");
fclose(stdin);
fclose(stdout);
return 0;
}