题意:空间中有n个点,任意3个点不共线。每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形。给你一组数据,计算同色三角形的总数。
考虑补集,异色三角形
每个点的边红色和蓝色两条边组成的一定是异色
每个异色会算两遍
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=1005;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
int n, m, a[N];
int main() {
freopen("in","r",stdin);
n=read(); m=read();
for(int i=1; i<=m; i++) a[read()]++, a[read()]++;
ll all=n*(n-1)*(n-2)/6, dif=0;
for(int i=1; i<=n; i++) dif += a[i]*(n-1-a[i]);
dif/=2;
printf("%lld\n", all-dif);
}