Cod sursa(job #991425)

Utilizator ludacrivasilii teodorovici ludacri Data 30 august 2013 15:18:32
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 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;
 
}