BZOJ 2916: [Poi1997]Monochromatic Triangles [计数]

题意:空间中有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
", all-dif);
}

原文地址:https://www.cnblogs.com/candy99/p/6617745.html