Pagini recente » Cod sursa (job #955584) | Cod sursa (job #1140721) | Cod sursa (job #1234978) | Cod sursa (job #1441583) | Cod sursa (job #81727)
Cod sursa(job #81727)
#include <stdio.h>
#include <memory.h>
#include <set>
using namespace std;
#define NMAX 30002
int n, m;
int maxim, nr;
int g[NMAX];
set<int> a[NMAX];
void read()
{
int i, x, y;
scanf("%d%d", &n, &m);
for(i = 1; i <= m; ++i)
{
scanf("%d%d", &x, &y);
a[x].insert(y), a[y].insert(x);
++g[x], ++g[y];
}
}
int c[6];
void back(int x, int k)
{
if(k <= 3)
{
set<int> :: iterator it, fin = a[x].end();
int i, j;
short ok;
for(it = a[x].begin(); it != fin; ++it)
{
for(ok = 1, j = 0; j < k && ok; ++j)
if(a[*it].find(c[j]) == a[*it].end())
ok = 0;
if(ok)
{
c[k] = *it;
back(*it, k+1);
}
}
if(k == maxim)
++nr;
else if(k > maxim)
maxim = k, nr = 1;
//for(i = 0; i < k; ++i)
//printf("%d ", c[i]);
//printf("\n");
}
}
void df(int x)
{
c[0] = x;
back(x, 1);
set<int> :: iterator it, fin = a[x].end();
for(it = a[x].begin(); it != fin; ++it)
{
--g[ *it ];
a[*it].erase(x);
}
short ok = 1;
for(it = a[x].begin(); it != fin; ++it)
{
if(g[ *it ] < 6 && ok)
df(*it), ok = 0;
}
}
int main()
{
freopen("count.in", "r", stdin);
freopen("count.out", "w", stdout);
read();
int i;
for(i = 1; i <= n; ++i)
if(g[i] < 6)
df(i);
printf("%d ", maxim);
if(maxim <= 2)
printf("%d\n", nr);
if(maxim == 3)
printf("%d\n", nr/2);
if(maxim == 4)
printf("%d\n", nr/6);
return 0;
}