题目不难,关键是要搞清楚矩阵AT*A的含义是什么,然后再利用下点的度数和边的关系就搞定了。
#include <cstdio>
#include <vector>
using namespace std;
template<typename T, typename T2>
void makeVector(T & a, int len, const T2 & initV) {
a.resize(len);
for (int i = 0; i < a.size(); ++i) a[i] = initV;
}
vector< int > adjEdgeNum;
int N;
int M;
void run() {
scanf("%d %d", &N, &M);
makeVector(adjEdgeNum, N + 1, 0);
int i, start, end;
int ans = 0;
for (i = 1; i <= M; ++i) {
scanf("%d %d", &start, &end);
ans = ans + adjEdgeNum[start] * 2 + adjEdgeNum[end] * 2;
adjEdgeNum[start]++;
adjEdgeNum[end]++;
}
ans = ans + M * 2;
printf("%d\n", ans);
}
int main() {
run();
return 0;
}