Cod sursa(job #3270634)

Utilizator ax_dogaruDogaru Alexandru ax_dogaru Data 23 ianuarie 2025 20:21:40
Problema Copii Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, ech[20], nrechipe=0, cnt=0, frecv[15], nrprieteni;
string x;
vector<int> a[100], echipa[15];

void resetfr() {
    for(int i=0; i<=13; i++) {
        frecv[i]=0;
    }
}

void resetechipa() {
    for(int i=0; i<=13; i++) {
        echipa[i].clear();
    }
}

bool verif(int nrechipe) {
    resetfr();
    resetechipa();
    for(int i=1; i<=n; i++) {
        echipa[ech[i]].push_back(i);
    }
    for(int ec=1; ec<=nrechipe; ec++) {
        nrprieteni=nrechipe-1;
        for(auto vec:echipa[ec]) { /// luam toti membrii ai echipei ec (vec)
            for(auto vec1:a[vec]) { /// luam toti prietenii membrului vec (vec1)
                //if(frecv[ech[vec1]]==0 && ech[vec1]!=ec) {
                frecv[ech[vec1]]++;
                //    nrprieteni--;
                //}
            }
            /*if(nrprieteni!=0) {
                return false;
            }*/
        }
        for(int ec2=1; ec2<=nrechipe; ec2++) {
            if(ec2!=ec && frecv[ec2]==0) {
                return false;
            }
        }
    }
    return true;
}

void bktr(int k) {
    int prevech;
    if(k==n+1) {
        if(verif(nrechipe)) {
            cnt++;
        }
        return;
    }
    for(int i=1; i<=nrechipe+1; i++) {
        ech[k]=i;
        prevech=nrechipe;
        if(i==nrechipe+1) {
            nrechipe++;
        }
        bktr(k+1);
        nrechipe=prevech;
        ech[k]=0;
    }
}

int main()
{
    fin >> n;
    for(int i=1; i<=n; i++) {
        fin >> x;
        for(int j=1; j<=n; j++) {
            if(x[j-1]=='1') {
                a[i].push_back(j);
            }
        }
    }
    bktr(1);
    fout << cnt-1;
    return 0;
}