#include <bits/stdc++.h>
using namespace std;
unordered_map<long, unordered_map<long, unordered_map<long, int>>>mp;
long ans = 0, u[50010], v[50010], w[50010];
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
long n, m;
cin >> n >> m;
for (long i = 0; i < m; i++) {
cin >> u[i] >> v[i] >> w[i];
mp[u[i]][v[i]][w[i]]++;
}
for (long i = 0; i < m; i++) {
long a = u[i], b = v[i], c = w[i];
for (auto d : mp[a][b])
if (c < d.first && d.first <= n && mp[a][c][d.first] >= 1 && mp[b][c][d.first] >= 1)
ans += mp[a][b][c] * mp[a][b][d.first] * mp[a][c][d.first] * mp[b][c][d.first];
}
cout << ans;
return 0;
}
用的 unodered_map ,搞不懂为啥TLE。
时间复杂度O(nm),和题解的差不多。