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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    redis总结
    java程序启动脚本
    mysql生成百万测试数据脚本
    java分布式锁的实现及在springboot中的应用
    mysql使用总结
    一个java实现代码(服务)编排的思路(未完)
    sentinel自定义统一限流降级处理
    shell学习
    oracle查看被锁的事务进程sql
    Sql查询两个时间段有重叠的记录
  • 原文地址:https://www.cnblogs.com/lightac/p/10534743.html
Copyright © 2011-2022 走看看