Pagini recente » Cod sursa (job #1512830) | Cod sursa (job #355200) | Cod sursa (job #2196749) | Cod sursa (job #1337717) | Cod sursa (job #239320)
Cod sursa(job #239320)
#include<stdio.h>
#include<algorithm>
#include<vector>
#define pb push_back
using namespace std;
const int maxn = 100000;
int GR[maxn],ST[maxn];
int N,M,VER[maxn],MAT[30];
vector<int> VECT[maxn],NODCUR,NODCUR2;
bool cautare(vector<int> &vect,int val)
{
int p = 0,x = 0,n = vect.size();
for(p = 1;p < n; p <<= 1);
for(;p;p >>= 1)
if (x + p < n && vect[x + p] <= val) x += p;
return vect[x] == val;
}
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);
VECT[x].pb(y);
VECT[y].pb(x);
}
int maxa = 0,nrsol = 0;
for(int i = 1;i <= N; ++i) sort(VECT[i].begin(),VECT[i].end());
// for(int i = 1;i <= N; ++i) VECT[i].resize(unique(VECT[i].begin(),VECT[i].end()) - VECT[i].begin());
for(int i = 1;i <= N; ++i) GR[i] = VECT[i].size() + 1;
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]);
}
memset(MAT,0,sizeof(MAT));
for(unsigned int j = 0;j < NODCUR.size(); ++j) MAT[j] |= (1 << j);
for(unsigned int j = 0;j < NODCUR.size(); ++j)
for(unsigned int k = j + 1;k < NODCUR.size(); ++k)
if (cautare(VECT[NODCUR[j]],NODCUR[k])) {MAT[j] |= (1 << k); MAT[k] |= (1 << j);}
for(int st = 0; st < (1 << NODCUR.size()); ++st)
{
int ver = 1,nrnod = 1;
for(unsigned int j = 0;j < NODCUR.size(); ++j)
{
if (st & (1 << j)) nrnod++;
if (st & (1 << j) && ((st & MAT[j]) != st)) ver = 0;
}
if (!ver) continue;
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;
}