Cod sursa(job #1333642)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 3 februarie 2015 14:07:37
Problema Balanta Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("balanta.in");
ofstream fout("balanta.out");

const int NMAX=1050;

int n,m,a[NMAX],b[NMAX],len[NMAX],ans[NMAX];
int mat1[NMAX][NMAX],mat2[NMAX][NMAX];
bool ok;
bitset<NMAX>viz;

inline void SOLVE(int c[NMAX][NMAX],int d[NMAX][NMAX])
{
    int i,j,nr,poz;
    for (i=1;i<=n;i++) viz[i]=0;
    for (i=1;i<=m;i++)
        {
            if (ans[i]==0)
                {
                    for (j=1;j<=len[i];j++) viz[c[i][j]]=1;
                    for (j=1;j<=len[i];j++) viz[d[i][j]]=1;
                }
            if (ans[i]==1)
                for (j=1;j<=len[i];j++) viz[c[i][j]]=1;
            if (ans[i]==2)
                for (j=1;j<=len[i];j++) viz[d[i][j]]=1;
        }
    nr=0;
    for (i=1;i<=n;i++)
        if (!viz[i])
            nr++;
    if (nr==1)
        {
            for (i=1;i<=n;i++)
                if (!viz[i])
                    poz=i;
            ok=1;
            fout<<poz<<"\n";
        }
}

int main()
{
    int i,j;
    fin>>n>>m;
    for (i=1;i<=m;i++)
        {
            fin>>len[i];
            for (j=1;j<=len[i];j++) fin>>mat1[i][j];
            for (j=1;j<=len[i];j++) fin>>mat2[i][j];
            fin>>ans[i];
        }
    //mai usor
    SOLVE(mat1,mat2);
    if (ok==0)
    {
        //mai greu
        SOLVE(mat2,mat1);
    }
    if (ok==0) fout<<"0\n";
    return 0;
}