Cod sursa(job #1854935)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 23 ianuarie 2017 12:39:22
Problema Count Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.03 kb
# include <fstream>
# include <set>
# define DIM 30010
using namespace std;
ifstream fin("count.in");
ofstream fout("count.out");
set<int> Lista[DIM];
set<int>::iterator it;
int Marcat[DIM],c[DIM],v[DIM],val[DIM];
int n,m,i,j,t,x,y,s,p,u,maxim,nrmax,k;
int main () {
    fin>>n>>m;
    for(i=1;i<=m;i++){
        fin>>x>>y;
        Lista[x].insert(y);
        Lista[y].insert(x);
    }
    for(i=1;i<=n;i++){
        p=0;
        for(it=Lista[i].begin();it!=Lista[i].end();it++)
            p++;
        val[i]=p;
        s+=p;
        if(p<=5){
            c[++u]=i;
            Marcat[i]=1;
        }
    }
    maxim=2;
    nrmax=s/2;
    p=1;
    while(p<=u){
        int nc=c[p++];
        k=0;
        for(it=Lista[nc].begin();it!=Lista[nc].end();it++)
            v[++k]=*it;
        for(i=1;i<=k-2;i++)
            for(j=i+1;j<=k-1;j++)
                for(t=j+1;t<=k;t++){
                    if(Lista[nc].count(v[i])&&Lista[nc].count(v[j])&&Lista[nc].count(v[t])&&Lista[v[i]].count(v[j])&&Lista[v[i]].count(v[t])&&Lista[v[j]].count(v[t])){
                        if(4>maxim){
                            maxim=4;
                            nrmax=0;
                        }
                        if(4==maxim)
                            nrmax++;
                    }
                }
        if(maxim!=4)
            for(i=1;i<k;i++)
                for(j=1;j<=k;j++){
                    if(Lista[nc].count(v[i])&&Lista[nc].count(v[j])&&Lista[v[i]].count(v[j])){
                        if(3>maxim){
                            maxim=3;
                            nrmax=0;
                        }
                        if(3==maxim)
                            nrmax++;
                    }
            }
        for(i=1;i<=k;i++){
            Lista[v[i]].erase(Lista[v[i]].find(nc));
            val[i]--;
            if(val[i]<=5&&Marcat[i]==0){
                c[++u]=i;
                Marcat[i]=1;
            }
        }
    }
    fout<<maxim<<" "<<nrmax<<"\n";
    return 0;
}