Cod sursa(job #2338902)

Utilizator triscacezarTrisca Vicol Cezar triscacezar Data 7 februarie 2019 22:46:37
Problema Count Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("count.in");
ofstream g("count.out");

int n,m,i,j,k,ans,cnt,lst[100010],G[100010],gr[100010],viz[100010];
vector <int> v[30005];
unordered_set <int> H[30005];
queue<int> q;

void bkt(int poz,int nr)
{
    if(poz==k+1)
    {
        nr++;
        if(nr>ans)
            ans=nr,cnt=1;
        else
            if(nr==ans)
                cnt++;
        return ;
    }
    bkt(poz+1,nr);
    for(i=1;i<=nr;i++)
        if(H[G[i]].find(lst[poz])==H[G[i]].end())
            return ;
    G[nr+1]=lst[poz];
    bkt(poz+1,nr+1);
}

int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        int x,y;
        f>>x>>y;
        v[x].push_back(y);H[x].insert(y);
        v[y].push_back(x);H[y].insert(x);
        gr[x]++;gr[y]++;
    }
    for(i=1;i<=n;i++)
        if(gr[i]<6)
        {
            q.push(i);
            viz[i]=1;
        }
    while(q.size())
    {
        int x=q.front();
        q.pop();viz[x]=2;
        k=0;
        for(auto it:v[x])
            if(viz[it]!=2)
            {
                lst[++k]=it;
                gr[it]--;
                if(gr[it]<6&&!viz[it])
                {
                    q.push(it);
                    viz[it]=1;
                }
            }
        bkt(1,0);
    }
    g<<ans<<' '<<cnt;
    return 0;
}