三色环

题面

给定一张含有 nn 个点的无向完全图,其中 mm 条边是白边,其余是黑边。

现在需要你求出同色的三元环(或者说,三角形)的个数。


同色三角形其实难算,那么我们可以算异色三角形,用三角形的总个数减去它的一半

如果一个点可以连出白色边x条就可以连出黑色边nx1条

那我们从x条白边任意选一条,从n-x-1条黑边任意选一条,剩下一条边随意

所以不同色三角形的个数就是x*(n-1-x)

之后1-n枚举

n个点可以构成的三角形个数就是n(n1)(n2)/(123)

再减去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;
}
原文地址:https://www.cnblogs.com/iss-ue/p/12486845.html