题目链接 \(Description\) n个点的完全图,其中有m条边用红边相连,其余边为蓝色.求其中三边同色的三角形个数. \(Solution\) 直接求同色 除了n^3 不会.. 三角形总数是C(n,3),考虑求不同色三角形个数.如果一个点连着两条不同颜色的边,那么这一定是个不同色三角形. 如果点i连出的红边数为\(x\),那么连出蓝边\(n-1-x\),形成的不同色三角形个数就是\(x*(n-1-x)\). 因为同一个不同色三角形会被枚举两次,so \(Ans=C(n,3)-\frac{…
题意:空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,计算同色三角形的总数. 考虑补集,异色三角形 每个点的边红色和蓝色两条边组成的一定是异色 每个异色会算两遍 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long…
2916: [Poi1997]Monochromatic Triangles Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 310  Solved: 150 Description        空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,计算同色三角形的总数. Input 第一行是整数n, 3 <= n <= 1000,点的个数. 第二行是整数m, 0 <=…
bzoj2916: [Poi1997]Monochromatic Triangles 链接 bzoj 思路 总方案\(C_{n}^{3}-异色三角形\) 异色三角形有个特点. 会出现两个点有两条不同色的边. 然后统计就行了. 代码 #include <bits/stdc++.h> #define ll long long using namespace std; const int _=5e3+7; int n,m,a[_]; int main() { scanf("%d%d&quo…
题目链接 CF 原题 \(Description\) 有n个点,其中有m条边连接两个点.每一个没有连边的三元组\((i,j,k)(i<j<k)\)对答案的贡献为\(A*i+B*j+C*k\),求所有无连边三元组的贡献和. \(Solution\) 直接求无连边三元组依旧很难.考虑用所有方案去减,那 Ans=所有方案-至少有1条连边+至少有2条连边-有3条边("至少"显然比较好做啊). 对于所有方案,A,B,C可以分别统计,即枚举哪个是A/B/C,剩下的随便组合. 对于至少1…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3498 [题目大意] N个点m条边,每个点有一个点权a. 对于任意一个三元环(j,j,k)其贡献为max(a[i],a[j],a[k]),请你求出贡献值之和. [题解] 我们将无向边转化成从权值大的点指向权值小的点的有向边,按权值从小到大的顺序枚举起始点,枚举相连的点,如果其出度小于sqrt(m),那么枚举与其相连的点,判断是否和起始点相连,否则,枚举起始点相连的点,判断是否和枚举点相…
题目描述        空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,计算同色三角形的总数.          输入 第一行是整数n, 3 <= n <= 1000,点的个数. 第二行是整数m, 0 <= m <= 250000,红线数目.   接下来的m行,每行两个数p和k,1 <= p < k <= n.表示一条红线的两个端点.       输出   一个整数,单色三角形的数目.…
Description 空间中有n个点,任意3个点不共线.每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形.给你一组数据,告诉你哪些点间有一条红线,计算同色三角形的总数. n<=1000,m<=250000.   题解 感觉同色不太好做? 那杂色呢?好做得不得了啊,一个杂色三角形肯定有一对红蓝边 那么我们考虑连接红蓝边的点的贡献 统计了点u连红边条数为t[u],那么贡献就是t[u]*(n-t[u]-1) 求sigma之后再除二,每个三角形被考虑两次 再用C(n,3)…
答案等于总三角形数-不合法数 一个不合法三角形一定存在两个顶点,在这个三角形中这个顶点的角的两边不同色 #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<cstdio> using namespace std; inline int read() { ,f=;char ch=getchar(); ;ch=getchar();} )+(…
首先引入一个最常见的经典三元环问题. #include <bits/stdc++.h> using namespace std; const int maxn = 100005; vector <int> g[maxn], low, high; map <int, int> mp[maxn]; int n, m, in[maxn], vis[maxn]; int main() { scanf("%d %d", &n,&m); for(…