Pagini recente » Cod sursa (job #829799) | Cod sursa (job #11180) | Cod sursa (job #38248) | Cod sursa (job #960322) | Cod sursa (job #1360562)
#include<fstream>
#include<vector>
#include<map>
#include<unordered_map>
using namespace std;
typedef int var;
ifstream fin("count.in");
ofstream fout("count.out");
struct Edge {
var n1, n2;
Edge(var a, var b) {
n1 = a;
n2 = b;
}
};
#define MAXN 30001
vector<Edge> EDGES;
unordered_map<var, bool> ADJ[MAXN];
var n;
var nodes[4];
inline bool res() {
for(var i=0; i<4; i++) {
for(var j=i+1; j<4; j++) {
if(!ADJ[nodes[i]][nodes[j]])
return 0;
}
}
return 1;
}
int main() {
var m, a, b;
fin>>n>>m;
for(var i=1; i<=m; i++) {
fin>>a>>b;
EDGES.push_back(Edge(a, b));
ADJ[a][b] = 1;
ADJ[b][a] = 1;
}
var cnt3 = 0;
for(auto e: EDGES) {
for(var i=1; i<=n; i++) {
if(ADJ[e.n1][i] && ADJ[e.n2][i]) {
cnt3 ++;
}
}
}
var cnt4 = 0;
for(auto e: EDGES) {
for(auto f: EDGES) {
if(e.n1 != f.n1 && e.n2 != f.n2 && e.n1 != f.n2 && e.n2 != f.n1) {
nodes[0] = e.n1;
nodes[1] = e.n2;
nodes[2] = f.n1;
nodes[3] = f.n2;
cnt4 += res();
}
}
}
if(cnt4 > 0) {
fout<<"4 "<<cnt4/6;
} else if(cnt3 > 0) {
fout<<"3 "<<cnt3/3;
} else {
fout<<"2 "<<m;
}
return 0;
}