Cod sursa(job #1083737)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 16 ianuarie 2014 12:47:49
Problema Balanta Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <fstream>
using namespace std;
ifstream f("balanta.in");
ofstream g("balanta.out");
int n,m;
bool G[1030],U[1030];
int nrg,nru;
int T[2][1030];

int main(void){
    register int i,j,k,r;

    f>>n>>m;
    nrg=nru=n;
    for(i=1;i<=m;i++){
        f>>k;
        for(j=1;j<=k;j++) f>>T[0][j];
        for(j=1;j<=k;j++) f>>T[1][j];
        f>>r;
        switch(r){
            case 1:
                for(j=1;j<=k;j++){
                    if(!G[T[1][j]])
                        G[T[1][j]]=true,nrg--;
                    if(!U[T[0][j]])
                        U[T[0][j]]=true,nru--;
                }
            break;
            case 2:
                for(j=1;j<=k;j++){
                    if(!G[T[0][j]])
                        G[T[0][j]]=true,nrg--;
                    if(!U[T[1][j]])
                        U[T[1][j]]=true,nru--;
                }
            break;
            default:
                for(j=1;j<=k;j++){
                    if(!G[T[1][j]])
                        G[T[1][j]]=true,nrg--;
                    if(!U[T[0][j]])
                        U[T[0][j]]=true,nru--;
                    if(!G[T[0][j]])
                        G[T[0][j]]=true,nrg--;
                    if(!U[T[1][j]])
                        U[T[1][j]]=true,nru--;
                }
        }
    }

    if(nrg==1){
        for(i=1;i<=n;i++)
            if(!G[i]){
                g<<i;
                f.close();
                g.close();
                return 0;
            }
    }
    else{
        if(nru==1){
            for(i=1;i<=n;i++)
                if(!U[i]){
                    g<<i;
                    f.close();
                    g.close();
                    return 0;
                }
        }
        else
            g<<"0";
    }
    f.close();
    g.close();
    return 0;
}