Pagini recente » Cod sursa (job #519223) | Cod sursa (job #1874310) | Cod sursa (job #1242701) | Cod sursa (job #1111391) | Cod sursa (job #1730727)
#include<cstdio>
#include<vector>
#include<unordered_set>
#define MAXN 30010
using namespace std;
unordered_set<int> g[MAXN];
unordered_set<int> nodes;
vector<int> Stack;
int n,m,best=0,howMany;
bool Check(int node){
int i;
for(i=0;i<Stack.size();i++)
if(node<Stack[i]||g[node].count(Stack[i])==0)
return false;
return true;
}
void Backtracking(unordered_set<int> &List,int level){
unordered_set<int>::iterator it;
if(level>best){
best=level;
howMany=1;
}
else
if(level==best)
howMany++;
for(it=List.begin();it!=List.end();it++)
if(Check(*it)==true){
Stack.push_back(*it);
Backtracking(List,level+1);
Stack.pop_back();
}
}
void Solve(){
int node;
unordered_set<int>::iterator it;
while(!nodes.empty()){
node=*nodes.begin();
nodes.erase(nodes.begin());
Backtracking(g[node],1);
for(it=g[node].begin();it!=g[node].end();it++){
g[*it].erase(node);
if(g[*it].size()<6)
nodes.insert(*it);
}
}
}
int main(){
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
int i,a,b;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++){
scanf("%d%d",&a,&b);
g[a].insert(b);
g[b].insert(a);
}
for(i=1;i<=n;i++)
if(g[i].size()<6)
nodes.insert(i);
Solve();
printf("%d %d",best,howMany);
return 0;
}