Cod sursa(job #979454)

Utilizator crisbodnarCristian Bodnar crisbodnar Data 1 august 2013 17:32:26
Problema Count Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <set>

#define us unsigned short

using namespace std;

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

const int N = 30010;

int n, m, trei, patru;
queue <us> q;
set <us> a[N];

int main()
{
    fin>>n>>m;
    for(int i=1; i<=m; i++)
    {
        int x, y;
        fin>>x>>y;
        a[x].insert(y);
        a[y].insert(x);
    }

    for(int i=1; i <= n; i++)
        if(a[i].size() < 6)
        {
            q.push(i);
        }

    set <us> :: iterator ii, jj, k;
    while(!q.empty())
    {
        us x = q.front(); q.pop();
        for(ii = a[x].begin(); ii != a[x].end(); ii++)
            for(jj = ii; jj != a[x].end(); jj++)
            if(*jj > *ii && a[*ii].count(*jj))
            {
                ++trei;
                for(k = jj; k != a[x].end(); k++)
                    if(*k > *jj && a[*ii].count(*k) && a[*jj].count(*k))
                        ++patru;
            }
        for(ii = a[x].begin(); ii != a[x].end(); ii++)
        {
            a[*ii].erase(x);
            if(a[*ii].size() == 5) q.push(*ii);
        }
    }

    if(patru)
        fout<<4<<' '<<patru;
    else if(trei)
        fout<<3<<' '<<trei;
    else
        fout<<2<<' '<<m;
    return 0;
}