Cod sursa(job #1424921)

Utilizator preda.andreiPreda Andrei preda.andrei Data 25 aprilie 2015 21:32:50
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <iostream>
#include <fstream>

using namespace std;

int h[1025];
int l[1025];
int v1[513];
int v2[513];

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

    int n, m, x, r;
    fin >> n >> m;

    for(int i=1; i<=n; i++)
        h[i]=l[i]=1;

    for(int z=1; z<=m; z++){
        fin >> x;
        for(int j=1; j<=x; j++)
            fin >> v1[j];
        for(int j=1; j<=x; j++)
            fin >> v2[j];
        fin >> r;
        if(r==1 || r==0){
            for(int i=1; i<=x; i++){
                l[v1[i]]--;
                if(r!=0)l[v2[i]]++;
                h[v2[i]]--;
                if(r!=0)h[v1[i]]++;
            }
        }
        if(r==2 || r==0){
            for(int i=1; i<=x; i++){
                l[v2[i]]--;
                if(r!=0)l[v1[i]]++;
                h[v1[i]]--;
                if(r!=0)h[v2[i]]++;
            }
        }
        if(r!=0){
            for(int i=1; i<=n; i++){
                h[i]--;
                l[i]--;
            }
        }
    }

    for(int i=1; i<=n; i++){
        //fout << h[i] << " " << l[i] << endl;
        if(h[i]==1)
            h[0]++;
        if(l[i]==1)
            l[0]++;
    }

    //fout << h[0] << " " << l[0] << endl;

    if(h[0]+l[0]==2){
        r=0;
        for(int i=1; i<=n; i++)
            if(h[i]==l[i] && h[i]==1){
                    r=i;
                    break;
            }
        fout << r;
    }
    else if(h[0]==1){
        for(int i=1; i<=n; i++)
            if(h[i]==1){
                fout << i;
                break;
            }
    }
    else if(l[0]==1){
        for(int i=1; i<=n; i++)
            if(l[i]==1){
                fout << i;
                break;
            }
    }
    else fout << 0;
    return 0;
}