Cod sursa(job #2398529)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 5 aprilie 2019 17:14:10
Problema Count Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

const int DIM = 3e4 + 7;

set <int> v[DIM];
vector <int> stiva;

int nr, mx;

set <int> s;

void back(int nod, int lvl)
{
	if(lvl > mx)
	{
		mx = lvl;
		nr = 1;
	}
	else
		if(lvl == mx)
		{
			nr++;
		}
	
	for(auto i : v[nod])
	{
		bool ok = true;
		
		for(auto j : stiva)
			if(v[i].count(j) == 0 || j < i)
			{
				ok = false;
				break;
			}
		
		if(ok == true)
		{
			stiva.push_back(i);
			back(nod, lvl + 1);
			stiva.pop_back();
		}
	}
}

int main()
{
	int n, m;
	cin >> n >> m;
	
	for(int i = 1; i <= m; i++)
	{
		int x, y;
		cin >> x >> y;
		
		v[x].insert(y);
		v[y].insert(x);
	}
	
	for(int i = 1; i <= n; i++)
		if(v[i].size() <= 5)
			s.insert(i);
	
	while(!s.empty())
	{
		int nod = *s.begin();
		s.erase(s.begin());
		
		back(nod, 1);
		
		for(auto i : v[nod])
		{
			v[i].erase(nod);
			
			if(v[i].size() <= 5)
				s.insert(i);
		}
	}
	
	cout << mx << ' ' << nr;
}