Pagini recente » Cod sursa (job #3339092) | Cod sursa (job #734722) | Cod sursa (job #370307) | Monitorul de evaluare | Cod sursa (job #3323005)
#pragma GCC optimize("O3")
#include <fstream>
#include <algorithm>
#include <vector>
#define nmax (int)(3e4+1)
using namespace std;
ifstream cin("count.in");
ofstream cout("count.out");
int n,m,maxi,nr,x,y;
vector<int>v[nmax],aux;
bool Search(int nod,int x){
if(nod<x)
swap(x,nod);
int st=0,dr=v[x].size();
if(dr==0)
return 0;
while(st<=dr){
int mid=(st+dr)/2;
if(v[x][mid]==nod)
return 1;
else if(v[x][mid]>nod)
dr=mid-1;
else
st=mid+1;
}
return 0;
}
bool valid(int nod){
for(auto i:aux)
if(Search(nod,i)==0)
return 0;
return 1;
}
void bck(int nod,int p,int x){
aux.push_back(nod);
int dim=aux.size();
if(dim>maxi)
maxi=dim,nr=1;
else if(maxi==dim)
nr++;
for(int i=p;i<m;i++)
if(valid(v[x][i]))
bck(v[x][i],i+1,x);
aux.pop_back();
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>x>>y;
if(x<y)
v[x].push_back(y);
else
v[y].push_back(x);
}
for(int i=1;i<=n;i++)
sort(v[i].begin(),v[i].end());
//if(n<=2000){/// brut
for(int start=1;start<=n;start++){
m=v[start].size();
aux.clear();
bck(start,0,start);
}
cout<<maxi<<" "<<nr;
return 0;
//}
}