首页 > 其他分享 >【POJ 3275】Ranking the Cows 题解(传递闭包)

【POJ 3275】Ranking the Cows 题解(传递闭包)

时间:2023-09-16 23:31:54浏览次数:30  
标签:闭包 Ranking include int 题解 bs 奶牛 数目 关系

农夫约翰的N头奶牛(1≤N≤1000)产奶率各不相同,FJ希望根据这些比率从最快的奶牛到最慢的奶牛订购奶牛。 FJ已经比较了M(1≤M≤10000)对奶牛的产奶率。他想列出另外C对奶牛的列表,这样,如果他现在比较这些C对奶牛,他肯定能够推断出所有N头牛的正确顺序。请帮助他确定C的最小值,这样的列表是可能的。

输入 第1行:两个空格分隔的整数:N和M 第2..M+1行:分别是两个空格分隔的整数:X和Y。X和Y都在1…N的范围内,并描述了奶牛X的排名高于奶牛Y的比较。 输出 第1行:一个整数,是C的最小值。

Sample Input 5 5 2 1 1 5 2 3 1 4 3 4 Output 3

思路

根据排列组合易知,总关系数目为n * (n - 1) / 2。用一个位集合记录大小关系。大小关系具有传递性,若a > b > c,则必有a > c。通过这一结论,利用按位或运算,推断隐含的大小关系。最后统计已知的关系数目,用总关系数目减去已知关系数目得到待求关系数目。

AC代码

#include <iostream>
#include <bitset>
using namespace std;
#define AUTHOR "HEX9CF"

bitset<1005> bs[1005];

int main()
{
    int n, m;
    int cnt = 0;
    cin >> n >> m;
    int c = n * (n - 1) / 2;
    for (int i = 0; i < m; i++)
    {
        int a, b;
        cin >> a >> b;
        bs[a][b] = 1;
    }

    for (int j = 1; j <= n; j++)
    {
        for (int i = 1; i <= n; i++)
        {
            // a > b, b > c
            if (bs[i][j])
            {
                // a > c
                bs[i] |= bs[j];
            }
        }
    }
    for (int i = 1; i <= n; i++)
    {
        cnt += bs[i].count();
        // cout << bs[i].count() << endl;
    }
    // cout << cnt << endl;
    cout << c - cnt << endl;
    return 0;
}

标签:闭包,Ranking,include,int,题解,bs,奶牛,数目,关系
From: https://blog.51cto.com/HEX9CF/7496918

相关文章

  • 合并果子题解-C++ STL priority_queue容器的使用
    说明:本博文关于priority_queue容器的说明来源于www.cnblogs.com/fusiwei/p/11823053.html本人是刚刚接触算法竞赛的萌新,如果有大佬发现了错误,还望指出(真的有人会看本蒟蒻的博文吗)这是我的第一篇博文,更多是作为测试以后会将博客作为笔记记录学习的体会基本概念priority_queu......
  • lattice crosslink开发板mipi核心板csi测试dsi屏lif md6000 fpga 常见问题解答
    1.概述    CrossLink开发板,是用Lattice的芯片CrossLink家族系列的,LIF-MD6000-6JM80I。该芯片用于桥接视频接口功能,自带2路MIPI硬核的功能,4LANE MIPI的功能,支持高速率1.5Gbps。   其他普通IO支持1.2Gbps速率,支持5路MIPI通道功能。 芯片包含LVDS,SLVS200,SubL......
  • 华为应用市场上架 视频介绍上传 遇到的问题解决
    昨天在华为应用市场上架应用, 视频介绍上传时, 一直是视频加载中,百思不得其解. 虽然不是第一次上传视频了,怎么这次遇到这个问题.偶然发现在视频介绍上传时, 选择海报后,一定要下划,点击确认,才能完成上传!否则一直是视频加载中............
  • 属性闭包计算
                 ......
  • AnyCAD程序无法启动的问题解决方法
    在某些电脑上会出现基于AnyCAD开发的程序无法启动的问题,如:System-ArgumentEcception:Pleasecheckthedependendes解决方法安装最新的VS运行时库,如VS2022:微软官方下载地址:x64:vc_redist.x64.exeSystem.AccessViolationException:"Attemptedtoreadorwriteprotected......
  • CF1542E1 Abnormal Permutation Pairs (easy version) 题解
    CF1542E1AbnormalPermutationPairs(easyversion)题解不会Hardversion对于第一个限制字典序,我们可以考虑枚举前\(i\)位相同,然后考虑后\(n-i\)位。我们只需要保证\(p_{i+1}<q_{i+1}\)即可。我们设\(len=n-i\)。由于前\(i\)位完全相同,所以前\(i\)位内部......
  • CF1852B Imbalanced Arrays 题解
    CF1852BImbalancedArrays题解Links洛谷CodeforcesDescription对于一个给定的长度为\(n\)的数组\(A\),定义一个长度为\(n\)的数组\(B\)是不平衡的当且仅当以下全部条件满足:\(-n\leqB_{i}\leqn\)且\(B_{i}\ne0\)。即每个数在\([-n,n]\)内且不为\(0\)。......
  • LeetCode-Java题解 209. Minimum Size Subarray Sum
    题目地址:209.MinimumSizeSubarraySum解题思路:    看到这道题,心里本身是有双指针这个概念的,但是不知道怎么用,脑子里第一反应就是暴力解法,双for一把梭,然后时间就超时了...看了题解才知道滑动窗口这个解法,不禁直呼妙啊!感觉和双指针非常类似,其核心点在于避免了暴力算法的枚......
  • 题解 UVA1566 John
    题目描述两个人轮流取石子,每人每次可以\([1,a_i]\)个石子,最后取完石子的人为负。问最终谁会赢。具体思路若堆数为\(1\)且该堆数量为\(1\),先手必败。若堆数不为\(1\)且每堆数量都为\(1\),若有奇数堆,先手比败,否则,先手必胜。若堆数不为\(1\),转换为\(Nim\)游戏,判......
  • 洛谷题解 | P1046 陶陶摘苹果
    ​目录题目描述输入格式输出格式输入输出样例说明/提示题目思路AC代码题目描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现......