2017.1.19【初中部 】普及组模拟赛C组 小x的三角形 题解
2017-01-20 07:41
260 查看
原题:
http://172.16.0.132/junior/#contest/show/1369/1题目描述:
小x和小o在一起研究各种图形的性质。小x发明了一个问题:一个完全无向图有n个顶点,选择m条边得到它们,并将剩余的 n(n-1)/2-m条边给小o。小x和小o喜欢图中的三角形,他们想知道他们得到的边所形成的图共形成了多少个三角形。
图的顶点从1到n编号。
输入:
第一行包含两个用空格隔开的整数n和m,分别表示顶点数和小x选取的边数。接下来m行每行两个整数ai,bi,表示小x选取的第i条边连接顶点ai,bi,数据保证小x得到的图和初始的完全图无重边和自环。
输出:
输出一行一个整数,小x和小o得到的图所包含三角形的总数。样例输入:
样例输入1:5 5
1 2
1 3
2 3
2 4
3 4
样例输入2:
5 3
1 2
2 3
1 3
样例输出:
样例输出1:3
样例输出2:
4
数据范围限制:
对于20%的数据 1<=n<=20对于60%的数据 1<=n<=100
对于100%的数据 1<=n<=20000, 0<=m<=10^6,m<=n(n-1)/2,1<=ai,bi<=n,ai≠bi
样例解释:
第一个样例,小x得到的图有两个三角形:(1,2,3)和(2,3,4),小o有一个三角形(1,4,5),所以总数是3。第二个样例,小x的图只有一个三角形(1,2,3),小o的图有3个三角形(1,4,5),(2,4,5)和(3,4,5),所以总数是4。
分析:
统计每个数字出现的个数,然后将(数字的个数*(n-数字的个数-1))加入答案中,最后减去(n(n-1)(n-2)/6);实现:
#include<cstdio> long long n, m, i, a, b, bz[20001],s1, s2; int main() { freopen("triangles.in", "r", stdin); freopen("triangles.out", "w", stdout); scanf("%lld%lld", &n, &m); for (i = 1; i <= m; i++) { scanf("%lld%lld", &a, &b); bz[a]++; bz[b]++; } for (i = 1; i <= n; i++) s2 += bz[i] * (n - bz[i] - 1); s1 = (n * (n - 1) * (n - 2)) / 6; s2 /= 2; printf("%lld\n", s1 - s2); }
相关文章推荐
- 2017.1.19【初中部 】普及组模拟赛C组 小x的游戏 题解
- 2017.1.19【初中部 】普及组模拟赛C组 eko 题解
- 2017.1.19【初中部 】普及组模拟赛C组 MATH 题解
- 2017.1.13【初中部 】普及组模拟赛C组 money 最小花费 题解
- 2017.1.16【初中部 】普及组模拟赛C组 cirs 题解
- 2017.1.20【初中部 】普及组模拟赛C组 晒衣服 题解
- 2017.1.16【初中部 】普及组模拟赛C组 wtaxi 题解
- 2017.1.18【初中部 】普及组模拟赛C组 最佳裁判 题解
- 2017.1.20【初中部 】普及组模拟赛C组 鸡腿の小路 题解
- 2016.5.28【初中部 NOIP普及组 】模拟赛总结
- 初中OJ1997【2015.8.3普及组模拟赛】WZK打雪仗(war)
- 2017.1.16【初中部 】普及组模拟赛C组总结
- 2017.1.20【初中部 】普及组模拟赛C组 鸡腿の游戏 题解
- 2017.1.18【初中部 】普及组模拟赛C组 临时工计划 题解
- 2017.1.13【初中部 】普及组模拟赛C组 maxsum 最大约数和 题解
- 2017.1.18【初中部 】普及组模拟赛C组 捉迷藏 题解
- 2017.1.19【初中部 GDKOI】模拟赛B组 开灯 题解
- 初中OJ1994【普及组模拟赛】小口口矩阵
- 2016.10.05【初中部 NOIP普及组 】模拟赛总结
- 2016.11.12【初中部 NOIP普及组 】模拟赛