题面
给定一张含有 nn 个点的无向完全图,其中 mm 条边是白边,其余是黑边。
现在需要你求出同色的三元环(或者说,三角形)的个数。
同色三角形其实难算,那么我们可以算异色三角形,用三角形的总个数减去它的一半
如果一个点可以连出白色边x条就可以连出黑色边n−x−1条
那我们从x条白边任意选一条,从n-x-1条黑边任意选一条,剩下一条边随意
所以不同色三角形的个数就是x*(n-1-x)
之后1-n枚举
n个点可以构成的三角形个数就是n∗(n−1)∗(n−2)/(1∗2∗3)
再减去sumn的一半就是答案
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll ans,n,m,a[100009]; int main() { cin>>n>>m; for(int i=1;i<=m;i++) { int l,r; cin>>l>>r; a[l]++;a[r]++; } for(int i=1;i<=n;i++) ans+=(a[i]*(n-1-a[i])); ll z=1; z=n*(n-1)*(n-2)/6; cout<<z-ans/2; }