Pagini recente » Cod sursa (job #1934174) | Cod sursa (job #850075) | Cod sursa (job #879922) | Cod sursa (job #657470) | Cod sursa (job #121399)
Cod sursa(job #121399)
#include <stdio.h>
#include <vector>
#include <set>
using namespace std;
#define maxn 30010
#define pb push_back
#define mp make_pair
#define ll long long
int n,m,l;
vector <int> a[maxn];
set< pair<int, int> > S;
set< pair<int, int> > :: iterator I;
int g[maxn],c[maxn],s[maxn],u[maxn];
int sol;
ll rez;
int main()
{
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
scanf("%d %d ",&n,&m);
int i,x,y,j,k;
for (i=1;i<=m;i++)
{
scanf("%d %d ",&x,&y);
if (x>y) swap(x,y);
a[x].pb(y);
a[y].pb(x);
S.insert(mp(x,y));
S.insert(mp(y,x));
}
I = S.end();
for (i=1;i<=n;i++) g[i] = c[i] = a[i].size();
sol = 2;
rez = m;
for (i=1;i<=n;i++)
if (c[i] < 6)
{
u[i] = 1;
s[++l] = i;
}
for (i=1;i<=l;i++)
{
for (j=0;j<g[s[i]];j++)
{
c[a[s[i]][j]]--;
if (!u[a[s[i]][j]] && c[a[s[i]][j]]<6)
{
s[++l] = a[s[i]][j];
u[a[s[i]][j]] = 1;
}
}
for (j=0;j<g[s[i]];j++)
for (k=j+1;k<g[s[i]];k++)
if (S.find(mp(a[s[i]][j],a[s[i]][k]))!=I)
for (x=k+1;x<g[s[i]];x++)
if (S.find(mp(a[s[i]][j],a[s[i]][x]))!=I && S.find(mp(a[s[i]][k],a[s[i]][x]))!=I)
{
if (sol<4)
{
sol = 4;
rez = 1;
}
else if (sol == 4) rez++;
}
if (sol<4)
for (j=0;j<g[s[i]];j++)
for (k=j+1;k<g[s[i]];k++)
if (S.find(mp(a[s[i]][j],a[s[i]][k]))!=I)
{
if (sol<3)
{
sol = 3;
rez = 1;
}
else if (sol == 3) rez++;
}
}
printf("%d %lld\n",sol,rez/sol);
return 0;
}