zoukankan      html  css  js  c++  java
  • Monochromatic Triangles SCU 2090

    (图论与数学结合)Monochromatic Triangles SCU 2090

    在这里插入图片描述在这里插入图片描述 Triangle:三角形; monochromatic:单色的;segments:部分;vertices:顶点
    题意:第一行输入的代表的是输入图形的测试个数n(1),之后会有n组测试样例;对于每组测试样例:第一行代表的是图中所含的(任意三点不共线)的所有点的个数;第二行代表的是红色线段的个数m,之后会有m对数(数字的范围是1到n),若是p k,则代表p,k连线的线段为红色。本题输出的结果是:在图中所找到的三角形中三条线段都是红色的三角形的个数。

    #include<cstdio>
    #include<cstring>
    typedef long long ll;
    ll d[1001];
    
    int main()
    {
    	int t, n, m, u, v, x;
    	ll ans, sum;
    	scanf("%d", &t);
    	while (t--)
    	{
    		memset(d, 0, sizeof(d));
    		sum = 0;
    		scanf("%d%d", &n, &m);
    		for (x = 1; x <= m; x++)
    		{
    			scanf("%d%d", &u, &v);
    			d[u]++;
    			d[v]++;
    		}
    		for (x = 1; x <= n; x++)
    		{
    			sum += (d[x] * (n - 1 - d[x]));
    		}
    		ans = n * (n - 1) * (n - 2) / 6 - sum / 2;
    		printf("%lld\n", ans);
    	}
    }
    

    对于该代码的一些说明:
    Sum:指的是一个点对应的不符合要求的三角形的个数,用它除以二可以得到不符合条件的三角形的总数。While中第一个for循环表示对于输入的点进行标记。第二个for循环表示,计算sum;sum += (d[x] * (n - 1 - d[x])的意思是(d[x]指的是与x这个点相连的红色线段的个数), (n - 1 -d[x]指的则是与x这个点相连的非红色线段的个数),两者相乘得到的便是由该点对应的不符合要求三角形的个数,由于点会存在重复取的问题,所以在最后sum / 2得到的便是不符合要求的三角形的总数。

    作者:LightAc
    出处:https://www.cnblogs.com/lightac/
    联系:
    Email: dzz@stu.ouc.edu.cn
    QQ: 1171613053
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Python
    算法的时间复杂度和空间复杂度-总结
    列表自动滚动
    React 结合ant-mobile 省市区级联
    5G从小就梦想着自己要迎娶:高速率、低时延、大容量三个老婆
    一文读懂GaussDB(for Mongo)的计算存储分离架构
    cpu占用过高排查
    我是如何从零开始自学转行IT并进入世界500强实现薪资翻倍?
    Linux重定向用法详解
    说出来也许你不信,我被 Linux 终端嘲笑了……
  • 原文地址:https://www.cnblogs.com/lightac/p/10534743.html
Copyright © 2011-2022 走看看