Cod sursa(job #1333675)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 3 februarie 2015 14:37:55
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<bits/stdc++.h>
using namespace std;

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

const int oo=1<<30;
const int NMAX=1050;

int n,m,l,a[NMAX],b[NMAX],len[NMAX],ans[NMAX],z[NMAX],t[NMAX];
int mat1[NMAX][NMAX],mat2[NMAX][NMAX];
bool ok;

inline void SOLVE(int c[NMAX][NMAX],int d[NMAX][NMAX],int e[NMAX])
{
    int i,j;
    for (i=1;i<=m;i++)
        {
            if (ans[i]==0)
                {
                    for (j=1;j<=len[i];j++) e[c[i][j]]=-oo;
                    for (j=1;j<=len[i];j++) e[d[i][j]]=-oo;
                }
            else
            {
                if (ans[i]==1)
                    {
                        for (j=1;j<=len[i];j++) e[c[i][j]]=-oo;
                        for (j=1;j<=len[i];j++) e[d[i][j]]++;
                    }
                if (ans[i]==2)
                    {
                        for (j=1;j<=len[i];j++) e[d[i][j]]=-oo;
                        for (j=1;j<=len[i];j++) e[c[i][j]]++;
                    }
            }
        }
}

int main()
{
    int i,j,cnt=0,cnt1=0,poz=0,poz1=0;
    fin>>n>>m;
    for (i=1;i<=m;i++)
        {
            fin>>len[i];
            for (j=1;j<=len[i];j++) fin>>mat1[i][j];
            for (j=1;j<=len[i];j++) fin>>mat2[i][j];
            fin>>ans[i];
            if (ans[i]!=0) l++;
        }
    SOLVE(mat1,mat2,z);
    SOLVE(mat2,mat1,t);
    for (i=1;i<=n;i++)
        {
            if (z[i]==l) {poz=i;cnt++;}
            if (t[i]==l) {poz1=i;cnt1++;}
        }
    if (cnt==1 && cnt1==1) {fout<<"0\n";return 0;}
    if (cnt==1) fout<<poz<<"\n";
    else if (cnt1==1) fout<<poz1<<"\n";
    else fout<<"0\n";
    return 0;
}