Codeforces Round #142 (Div. 1) C. Triangles
来源:互联网 发布:淘宝联盟二维码分享 编辑:程序博客网 时间:2024/06/12 01:16
题意
有一个无向完全图(任意两个节点之间均有一条边),包含 n(1<=n<=10^6) 个顶点,现在有两个人A 和 B,A从这个无向图中取出 m(0<=m<=10^6) 条边出来,这样就把真个完全图分成了两个子图 A 和 B,要求统计两个子图中总共含有的“三角形”的个数。“三角形”的意思说的就是一个含有三个节点的环
做法分析
直接计算的话比较麻烦,没什么思路,我们可以这样考虑:
1、整个完全图在最初的时候(没有被 A 取走 m 条边)总共有 n*(n-1)*(n-2)/6 条边
2、分成了两个部分之后,“残缺的三角形”的形状只有以下两种:
不可能出现有三条边(属于A)或者0条边(属于B)的情况
现在的问题就转化成了怎么计算出这种三角形的个数了,我们通过观察可以发现,上面的两种三角形中有一个共性:有两个顶点,和他们相邻的两条边中,一条属于 A,一条属于 B ,好了,思路出来了:
对每个顶点 u,计算他在 A 中含有的边 edge_A 和在 B 中含有的边 edge_B,用 edge_A * edge_B 得到残缺三角形的个数。
注意:由于每个顶点都计算了一次,而一个三角形中含有两个这样的顶点,于是最终得到的残缺三角形数量要除以2
AC快速通道
http://codeforces.com/problemset/problem/229/C
代码
#include <iostream>#include <cstdio>#include <cstring>using namespace std;long long d[1000001], ans;int n, m;int main(){ scanf("%d%d", &n, &m); for(int i=1; i<=n; i++)d[i]=0; for(int i=0, a, b; i<m; i++) { scanf("%d%d", &a, &b); d[a]++; d[b]++; } ans=0; for(int i=1; i<=n; i++)ans+=d[i]*(n-1-d[i]);printf("%I64d\n", (long long)n*(n-1)*(n-2)/6-ans/2); return 0;}
- Codeforces Round #142 (Div. 1) C. Triangles
- Codeforces Round #142 (Div. 1) C. Triangles
- Codeforces Round #142 (Div. 1), problem: (C) Triangles
- Codeforces Round #309 (Div. 1) C. Love Triangles 二分图
- Codeforces Round #142 (Div. 1) C. Triangles 数学,完全图,统计贡献 2017/1/25
- 解题报告:Codeforces Round #142 (Div. 1) C. Triangles (思维好题)
- Codeforces Round #142 (Div. 2) E. Triangles
- CodeForces Round #142(229C) - Triangles
- Codeforces Round #309 (Div. 1) C. Love Triangles(二分图)
- Codeforces Round #296 (Div. 1) E. Triangles 3000
- D. Vanya and Triangles(Codeforces Round #308 (Div. 2))
- Codeforces Round #308 (Div. 2) D. Vanya and Triangles
- Codeforces Round #308 (Div. 2) D Vanya and Triangles
- Codeforces Round #142 (Div. 2) C. Shifts
- Codeforces Round #142 (Div. 2) C. Shifts
- Codeforces Round #142 (Div. 2) C. Shifts
- 【dp】Codeforces Round #110 (Div. 1) C
- Codeforces Round #230 (Div. 1)B,C
- 再学C++ Primer(10)-面向对象编程
- 质数问题总结
- JNI理解(今天肯定没有时间深入了)
- haXe入门
- 有关自定义控件(继承于uivew)触摸事件处理的感想
- Codeforces Round #142 (Div. 1) C. Triangles
- 淘宝技术发展
- JAVA.SWT/JFace: SWT Drag and Drop
- 《Android系统学习》第四章:分析Android系统编译过程
- 取消隐藏ios键盘的方法
- Windows7在Notepad++中配置Python+OpenCV
- [LeetCode]Convert Sorted List to Binary Search Tree
- c# asp.net常见问题收集之二
- CSS布局之文档流、块级元素与内联元素