Cod sursa(job #1471120)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 13 august 2015 05:20:03
Problema Count Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include<cstdio>
#include<set>
#include<queue>
using namespace std;
queue<int>Q;
set<int>L[30100];
set<int>::iterator it,itt,iit;
int n,m,i,j,a,b,v[100];
FILE *f,*g;
int main(){
    f=fopen("count.in","r");
    g=fopen("count.out","w");
    fscanf(f,"%d%d",&n,&m);
    for(i=1;i<=m;i++){
        fscanf(f,"%d%d",&a,&b);
        L[a].insert(b);
        L[b].insert(a);
    }
    for(i=1;i<=n;i++){
        if(L[i].size()<6)
            Q.push(i);
    }
    v[1]=n;
    v[2]=m;
    while(!Q.empty()){
        a=Q.front();
        for(it=L[a].begin();it!=L[a].end();it++){
            for(itt=L[a].begin();itt!=L[a].end();itt++){
                if( it!=itt && L[*it].find(*itt)!=L[*it].end() )
                    v[3]++;
            }
        }
        for(it=L[a].begin();it!=L[a].end();it++){
            for(itt=L[a].begin();itt!=L[a].end();itt++){
                if(it!=itt)
                    for(iit=L[a].begin();iit!=L[a].end();iit++){
                        if( it!=iit && L[*it].find(*itt)!=L[*it].end() && L[*it].find(*iit)!=L[*it].end() && L[*itt].find(*iit)!=L[*itt].end() )
                            v[4]++;
                    }
            }
        }
        for(it=L[a].begin();it!=L[a].end();it++){
            L[*it].erase(a);
            if(L[*it].size()==5)
                Q.push(*it);
        }
        Q.pop();
    }
    v[3]/=2;
    v[4]/=6;
    for(i=4;i>=1;i--){
        if(v[i]){
            fprintf(g,"%d %d",i,v[i]);
            return 0;
        }
    }









    fclose(f);
    fclose(g);
}