Pagini recente » Cod sursa (job #2773869) | Cod sursa (job #834885) | Cod sursa (job #2965024) | Cod sursa (job #1804128) | Cod sursa (job #239285)
Cod sursa(job #239285)
#include<stdio.h>
#include<set>
#include<vector>
#define pb push_back
using namespace std;
const int maxn = 40000;
int GR[maxn],ST[maxn];
int N,M,VER[maxn];
set<short> S[maxn];
vector<short> VECT[maxn],NODCUR,NODCUR2;
int main()
{
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
scanf("%d %d\n",&N,&M);
for(int i = 1;i <= M; ++i)
{
int x,y;
scanf("%d %d\n",&x,&y);
GR[x]++;GR[y]++;
S[x].insert(y);VECT[x].pb(y);
S[y].insert(x);VECT[y].pb(x);
}
int maxa = 0,nrsol = 0;
for(int i = 1;i <= N; ++i) if (GR[i] <= 5) {ST[++ST[0]] = i;VER[i] = 1;}
for(int i = 1;i <= ST[0]; ++i)
{
int nod = ST[i];
NODCUR.clear();
for(unsigned int j = 0;j < VECT[nod].size(); ++j)
{
if (VER[VECT[nod][j]] != 2) NODCUR.pb(VECT[nod][j]);
}
for(int st = 0; st <= (1 << NODCUR.size()); ++st)
{
NODCUR2.clear();
for(unsigned int j = 0;j < NODCUR.size(); ++j)
{
if (st & (1 << j)) NODCUR2.pb(NODCUR[j]);
}
int ver = 1;
for(unsigned int j = 0;j < NODCUR2.size() && ver; ++j)
for(unsigned int k = j + 1;k < NODCUR2.size() && ver; ++k)
if (S[NODCUR2[j]].find(NODCUR2[k]) == S[NODCUR2[j]].end()) ver = 0;
if (!ver) continue;
int nrnod = NODCUR2.size() + 1;
if (nrnod > maxa) {maxa = nrnod;nrsol = 0;}
if (nrnod == maxa) nrsol++;
}
VER[nod] = 2;
for(unsigned int j = 0;j < VECT[nod].size(); ++j)
{
if (VER[VECT[nod][j]]) continue;
GR[VECT[nod][j]]--;
if (GR[VECT[nod][j]]) {ST[++ST[0]] = VECT[nod][j];VER[VECT[nod][j]] = 1;}
}
}
printf("%d %d\n",maxa,nrsol);
return 0;
}