Cod sursa(job #1355557)

Utilizator rg2796Robert Gyalai rg2796 Data 22 februarie 2015 20:53:38
Problema Party Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("party.in");
ofstream out("party.out");
int x[101],n,m,v[1001][3],i,j,ma,M[100];
int verif(int i)
{
    int ok=1,j,k,l;
    for(j=0;j<m;j++)
    {
        if(v[j][2]==0)
        if(x[v[j][0]]==0&&x[v[j][1]]==0)
            ok=0;

        if(v[j][2]==1)
        if(x[v[j][0]]==0&&x[v[j][1]]==1)
            ok=0;

         if(v[j][2]==2)
        if(x[v[j][0]]==1&&x[v[j][1]]==0)
            ok=0;

        if(v[j][2]==3)
        if(x[v[j][0]]==1&&x[v[j][1]]==1)
            ok=0;

    }

    if(ok)
        return 1;
    else
        return 0;
}
void bk(int n,int i)
{
    int j,k,l=0,m=1;

    for(k=1;k<=n;k++)
        {if(x[k]!=0&&x[k]!=1)
            m=0;
          l+=x[k];
        }
    if(l==0)
        m=0;


    if(m)
    m=verif(i);

    if(m)
    {
        if(l>ma)
        {
            ma=l;
            for(k=1;k<=n;k++)
                M[k]=x[k];
        }
    }
    else
        if(i<=n)
    for(j=0;j<=1;j++)
    {
        x[i]=j;
        bk(n,i+1);
    }

}
int main()
{
    in>>n>>m;
    for(i=0;i<m;i++)
        in>>v[i][0]>>v[i][1]>>v[i][2];
    bk(n,1);
    out<<ma<<"\n";
    for(i=1;i<=n;i++)
        if(M[i]==1)
        out<<i<<"\n";
    return 0;
}