问题 A: 大红数星星

时间限制: 3 Sec  内存限制: 128 MB
提交: 1066  解决: 67
[提交][状态][讨论版]

题目描述

“三角形十分的美丽,相信大家小学就学过三角形具有稳定性,三角形也是二维几何中最基本的必不可少的元素之……”,大红走在路上若有所思,突然抬头看到了天空中有很多很亮的星星划过,星星和他们划过的轨迹像极了一个无向图。于是好学的大红,就开始数起了“三角形”,1、2、3……数了好久,大红数的眼泪都掉下来了,所以他哭着请求你来帮他,你这么好心一定不会拒绝吧!大红的三角形的定义:如果存在这样的三个边(A,B)、(B,C)、(A,C)(无向边),则算一个三角形。
大红会告诉你这个图G=(V,E),点数(星星个数)n和边数(轨迹个数)m以及每条边的两个点。

两个三角形不同是:当对于两个三角形的边,某个三角形存在一条边在另一个三角形的边中无法找到!

输入

多组数据。
第一行一个整数T<=10表示数据组数。
对于每组数据的第一行n表示星星个数,m表示星星划过的轨迹的个数,
接下来m行表示每个星星划过的轨迹的端点x,y(1<=x,y<=n)。
1<=n<=100000,1<=m<=min(100000,n*(n-1)/2)

输出

对于每组数据输出一个整数,表示三角形的个数。

样例输入

  1. 1
  2. 3 3
  3. 1 2
  4. 2 3
  5. 1 3

样例输出

  1. 1
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<sstream>
  5. #include<algorithm>
  6. #include<queue>
  7. #include<vector>
  8. #include<cmath>
  9. #include<map>
  10. #include<set>
  11. #include<fstream>
  12. #include<memory>
  13. #include<string>
  14. using namespace std;
  15. typedef long long LL;
  16. #define MAXN 100003
  17. #define INF 1000000009
  18. /*
  19. 寻找三角形的个数
  20. 思路:
  21. 1. 枚举所有边,然后枚举边上两个点中度比较小的 那个点中包含可以到达 枚举的边中另一点的边 +1
  22. 最后/3
  23. 2. 先把所有点按照度的大小排序,然后用数组记录一个点可以到达的顶点(要求顶点的度大于它)
  24. 然后枚举每条边,找两个顶点的公共元素数目
  25. */
  26. vector<int> E[MAXN];
  27. vector<int> cnt[MAXN];
  28. struct edge
  29. {
  30. int f, t;
  31. };
  32. int T, n, m;
  33. vector<edge> a;
  34. int main()
  35. {
  36. edge tmp;
  37. int f, t;
  38. scanf("%d", &T);
  39. while (T--)
  40. {
  41. scanf("%d%d", &n, &m);
  42. for (int i = ; i <= n; i++)
  43. {
  44. E[i].clear();
  45. }
  46. a.clear();
  47. int sum = ;
  48. for (int i = ; i < m; i++)
  49. {
  50. scanf("%d%d", &tmp.f, &tmp.t);
  51. E[tmp.f].push_back(tmp.t);
  52. E[tmp.t].push_back(tmp.f);
  53. a.push_back(tmp);
  54. }
  55. for (int i = ; i <= n; i++)
  56. {
  57. sort(E[i].begin(), E[i].end());
  58. }
  59. for (int i = ; i <= n; i++)
  60. {
  61. for (int j = ; j < E[i].size(); j++)
  62. {
  63. if (E[E[i][j]].size() > E[i].size())
  64. cnt[i].push_back(E[i][j]);//可以到达的顶点 在这里保证顶点的度大于它的度
  65. }
  66. }
  67. for (int i = ; i < m; i++)//枚举所有边,找两个顶点的公共点个数
  68. {
  69.  
  70. f = a[i].f, t = a[i].t;
  71. int s1 = E[f].size(), s2 = E[t].size();
  72. int z = , y = ;
  73. while (z < s1&&y < s2)
  74. {
  75. if (E[f][z] < E[t][y])
  76. {
  77. z++;
  78. }
  79. else if (E[f][z] > E[t][y])
  80. {
  81. y++;
  82. }
  83. else
  84. {
  85. z++; y++; sum++;
  86. }
  87. }
  88. }
  89. printf("%d\n", sum / );
  90. }
  91. }
  1.  

大红数星星 图论 XD网络赛的更多相关文章

  1. 2018 ICPC 沈阳网络赛

    2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...

  2. 2018 ICPC 徐州网络赛

    2018 ICPC 徐州网络赛 A. Hard to prepare 题目描述:\(n\)个数围成一个环,每个数是\(0\)~\(2^k-1\),相邻两个数的同或值不为零,问方案数. solution ...

  3. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F. Trig Function(切比雪夫多项式+乘法逆元)

    题目链接:哈哈哈哈哈哈 _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ _(:з」∠)_ 哈哈哈哈哈哈,从9月16日打了这个题之后就一直在补这道题,今天终于a了,哈哈哈哈哈哈. ...

  4. POJ-2796 & 2019南昌邀请赛网络赛 I. 区间最大min*sum

    http://poj.org/problem?id=2796 https://nanti.jisuanke.com/t/38228 背景 给定一个序列,对于任意区间,min表示区间中最小的数,sum表 ...

  5. 2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat

    题意:四个操作,区间加,区间每个数乘,区间的数变成 2^64-1-x,求区间和. 题解:2^64-1-x=(2^64-1)-x 因为模数为2^64,-x%2^64=-1*x%2^64 由负数取模的性质 ...

  6. ACM总结——2017区域赛网络赛总结

    从省赛回来至今4周,每周周末都在打网络赛,每次都是划水,总结下自己弱弱的ACM吧!划水水~~ 首先是新疆赛区,基本上都是图论相关的东西,全靠队友,自己翻水水,实力躺了5道. 然后是沈阳赛区,终于有点贡 ...

  7. (未完结)“文远知行杯”GDET第十四届竞赛(网络赛共10题,仅整理出6题)

    刚开学没多久就打了一个网络赛,通过这次网络赛我是发现我是真的菜... 放假前校赛的排名让我有些自满,寒假丝毫没有接触ACM,一直沉迷于Steam,这个真的值得好好反省. 虽然现在大一课有点多,在学校也 ...

  8. HDU 4759 Poker Shuffle(2013长春网络赛1001题)

    Poker Shuffle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  9. HDU 4747 Mex (2013杭州网络赛1010题,线段树)

    Mex Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

随机推荐

  1. 二分图染色模板(P1330 封锁阳光大学)

    二分图染色模板(P1330 封锁阳光大学) 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校 ...

  2. bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 裸矩阵乘法. 代码如下: #include<iostream> #incl ...

  3. hdu5673-Robot

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=5673 好久没打BC,当时这场过了3题,hack了一个,马马虎虎吧,因为前三个题确实不难. 这个是那场的第 ...

  4. php的get_object_vars函数

    我在看ecshop源码的时候,发现了一个非常有趣的函数,在此记下:get_object_vars() 从字面我们可以猜到,这个函数是针对类的一个方法:语法:array  get_object_vars ...

  5. C# 设置百分比保留2位数

    double a=50; double b=100; 没有小数部分Label1.Text = (a   /   (a+b)).ToString("0%")   两位小数Label2 ...

  6. golang 字符串替换截取

    package main import "fmt" func main() { str := "XBodyContentX" content := str[1 ...

  7. Python简介和基础入门

    1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是一种开发语言,而且已经 ...

  8. POJ 1118 求平面上最多x点共线

    题意:给你n个点的坐标.求一条直线最多能穿过多少个点. 思路:枚举(n^2)+求斜率+排序 (复杂度n^2logn)大功告成 //By: Sirius_Ren #include <cmath&g ...

  9. JSP页面使用EL表达式内容显示不全问题记录

    1.当EL表达式里面的值存在引号之类的字符时, ${caseparam.cp_value}的值为 {"cpage":"1","resType" ...

  10. Oracle update时做表关联

    感觉还是sqlserver中的写法比较好理解,Oracle的写法都快把我搞晕了, 注意: 1.要修改的表,不要加入到子查询中,用别名在子查询中与其他表进行关联即可. 2.exsits不能少,exsit ...