Pagini recente » Cod sursa (job #2279068) | Cod sursa (job #1230508) | Cod sursa (job #193370) | Cod sursa (job #2919749) | Cod sursa (job #1981447)
#include <fstream>
#include <unordered_set>
#include <queue>
using namespace std;
const int dim = 30005;
typedef unordered_set< int >::iterator sit;
ifstream fin("count.in");
ofstream fout("count.out");
unordered_set<int> L[dim];
queue<int> Q;
int Degree[dim];
int SOL[6]; //in SOL[i]: nr de clici cu i noduri
int n, m, x, y;
int main() {
fin >> n >> m;
for (int i = 1; i <= m; ++i) {
fin >> x >> y;
L[x].insert(y);
L[y].insert(x);
++Degree[x];
++Degree[y];
}
SOL[1] = n; //clici cu un nod
SOL[2] = m; //clici cu doua noduri
for (int i = 1; i <= n; ++i)
if (Degree[i] < 6)
Q.push(i);
while (!Q.empty()) {
int nod = Q.front();
Q.pop();
for (sit it1 = L[nod].begin(); it1 != L[nod].end(); ++it1) {
for (sit it2 = it1; it2 != L[nod].end(); ++it2) {
if (it1 == it2 || L[*it1].find(*it2) == L[*it1].end())
continue;
++SOL[3]; //am gasit o clica de dimensiune 3
for (sit it3 = it2; it3 != L[nod].end(); ++it3) {
if (it2 == it3 || L[*it1].find(*it3) == L[*it1].end() || L[*it2].find(*it3) == L[*it2].end())
continue;
++SOL[4]; //am gasit o clica de dimensiune 4
}
}
}
for (sit it = L[nod].begin(); it != L[nod].end(); ++it) {
--Degree[*it];
if (Degree[*it] == 5)
Q.push(*it);
L[*it].erase(nod); //stergem nodul din listele tuturor vecinilor sai
}
}
for (int i = 4; i; --i) {
if (SOL[i]) {
fout << i << " " << SOL[i];
return 0;
}
}
return 0;
}