解法

概要

中央を固定する。 和 を使って あるいは

詳細

のうち中央 に注目する。 を固定して の数を と書くとすると を数えればよい。

実装

#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; (i) < (int)(n); ++ (i))
using ll = long long;
using namespace std;

int main() {
    int n, m; cin >> n >> m;
    vector<map<int, int> > k(n);
    REP (j, m) {
        int a, b, l; cin >> a >> b >> l;
        -- a; -- b;
        k[a][l] += 1;
        k[b][l] += 1;
    }
    ll cnt = 0;
    REP (i, n) {
        REP (l, 2540 + 1) {
            if (k[i].count(l) and k[i].count(2540 - l)) {
                if (l != 2540 - l) {
                    cnt += (ll)k[i][l] * k[i][2540 - l];
                } else {
                    cnt += (ll)k[i][l] * (k[i][l] - 1);
                }
            }
        }
    }
    cnt /= 2;
    cout << cnt << endl;
    return 0;
}