Cod sursa(job #1673694)

Utilizator CalarisPredut Denis Stefanita Calaris Data 4 aprilie 2016 00:41:36
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>
#include <iostream>

using namespace std;

#define MAX 1025

int main()
{
    fstream f("balanta.in",ios::in);
    ofstream g("balanta.out");

    int N,M,k,state,i,nr=0,ok=0,answer,Max=-1;
    int stateArray[MAX],groupFirst[MAX],groupSecond[MAX],weight[MAX];

    f>>N>>M;

    for(i=1;i<=N;++i)weight[i]=0;

    do
        {
        f>>k;
        for(i=1;i<=k;++i)
            {
            f>>nr;
            groupFirst[i]=nr;
            }
        for(i=1;i<=k;++i)
            {
            f>>nr;
            groupSecond[i]=nr;
            }

        f>>state;
        if(state==0)
            for(i=1;i<=k;++i)
                {
                    stateArray[groupFirst[i]]=1;
                    stateArray[groupSecond[i]]=1;
                }
        else if(state==1)
            for(i=1;i<=k;++i)
                {
                    ++weight[groupFirst[i]];
                    --weight[groupSecond[i]];
                }
        else if(state==2)
            for(i=1;i<=k;++i)
                {
                    --weight[groupFirst[i]];
                    ++weight[groupSecond[i]];
                }
         }while(--M);


    nr=0;
    for(i=1;i<=N;++i)
        {
        if(stateArray[i]==0)
            {
                ++nr;
                if(nr==1)answer=i;
            }
        }
    if(nr==1)
        {
        g<<answer;
        return 0;
        }

    for(i=1;i<=N;++i)
        {
        if(stateArray[i]==0)
            {
                if(weight[i]<0)weight[i]=weight[i]*(-1);
                if(weight[i]>Max)
                  {
                    Max=weight[i];
                    ok=1;
                    answer=i;
                  }
                else if(weight[i]==Max)ok=0;
            }
        }

    if(ok && stateArray[answer]==0)g<<answer;
    else g<<0;

    return 0;
}