Cod sursa(job #866347)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 27 ianuarie 2013 20:59:44
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <fstream>
#define nmax (1<<10)
using namespace std;

int N,M,Sol,color,M1[nmax],M2[nmax];
bool A[nmax],B[nmax];

int Size(bool v[]) {

    int i,Ans;

    for(i=1,Ans=0;i<=N;i++)
        if(v[i])
            Ans++,Sol=i;

    return Ans;

}
void Keep(int source[],bool dest[]) {

    for(int i=1;i<=N;i++)
        if(source[i]==color && dest[i]==1)
            dest[i]=1;
        else
            dest[i]=0;

}
void Erase() {

    for(int i=1;i<=N;i++)
        if(M1[i]==color || M2[i]==color)
            A[i]=B[i]=0;

}
int main() {

    int i,k,r,x;
    ifstream in("balanta.in");
    ofstream out("balanta.out");

    in>>N>>M;

    for(int i=1;i<=N;i++)
        A[i]=B[i]=1;

    while(M--) {

        color++;
        in>>k;
        for(i=1;i<=k;in>>x,M1[x]=color,i++);
        for(i=1;i<=k;in>>x,M2[x]=color,i++);

        in>>r;
        if(r==0)
            Erase();
        else
        if(r==1)
            Keep(M1,B),
            Keep(M2,A);
        else
            Keep(M1,A),
            Keep(M2,B);

        }

    if(Size(A)+Size(B)==1)
        out<<Sol<<'\n';
    else
        out<<"0\n";

    in.close();
    out.close();

    return 0;

}