CF229C 题解
思路
对于每个 ,它们之间一定有一条边,可能在原图上,也可能在另一个平面。然后如果要构成三角形,这三点 必须互相连通,也相当于不能有 ( 表示 和 在原图上是否有边相连)。这也就说明对于 三个点,有两个点是有且仅有一条边与其余两个点相连,设 表示有 条边与 点不相连,则 条边与 相连(因为原先是完全图,每个点有 条边),根据乘法原理,有 种方案,但因为会重复算两次,所以在加和后要把得数除以 。然后完全图原先有 种选法,去除不合法的就是 个三角形。
代码
# include <bits/stdc++.h>
typedef long long ll;
using namespace std;
int n, m, x, y, a[1000005];
ll sum;
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> n >> m;
while (m --)
cin >> x >> y, ++ a[x], ++ a[y];
for (int i = 1; i <= n; ++ i)
sum += a[i] * (n - 1 - a[i]);
sum = n * (n - 1ll) * (n - 2) / 6 - sum / 2;
cout << sum;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下