P2881 [USACO07MAR]Ranking the Cows G

题目描述

输出格式

Line 1: A single integer that is the minimum value of C.

输入输出样例

输入样例

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

输出样例

3

题目分析

这个题主要考察图的应用.
我们可以把牛头数作为图的结点,把产奶能力作为图中的关系,可以做下图所示的转换:

然后根据已知条件:<1,5> <1,4>,<2,1> 可推得<2,4>,<2,5>.总共7种关系.而有向图最多有s = n*(n-1) /2 种关系.所以还需要的就是: s - 已知的七种;
如何得到己知关系呢?

可以利用bitset 位运算 ,每个结点用一个bitset表示。具体如何使用可以点击这里
bitsetp[maxn];-

  1. 建立一个 位数的二进制数组。
  2. 初始化时,p[i][i]=1, 即p[i]的第i位为1. 也就是自己能推出自己.
  3. 输入1—5,令p[1][5]=1,则p[1] = …00000 //从右往左数到第5个然后把值变为1,表示<1,5>
    输入1—4,令p[1][4]=1,则p[1] = …110010.0//从右往左数到第4个然后把值变为1,表示<1,4>
    输入2—1,令p[2][1]=1, 则p[2] = …0011000
    输入2—3,令p[2][3] =1,则p[2] = …01110
    输入3—4,令p[3][4]=1,则p[3] = …11000
  4. 判断每个数组的每一位:
    if(p[i][k])
          p[i] = p[i] | p[j]
    例如p[2][1]=1,则p[2]= p[2] | p[1]= 001110|110010111110;
    2和1有关系,而1和4、5有关系,通过或运算,可以得出2和4、5也有关系。

参考代码

#include<iostream>
#include<bitset>
using namespace std;
const int maxn = 1005;
bitset<maxn> b[maxn];
int main()
{int n, m,x,y,ans;ans = 0;cin >> n >> m;for (int i = 1; i <= n; i++)//自己能到自己,这个必须初始化,否则后序 | 运算会出错.{b[i][i] = 1;}while (m--)//初始化{cin >> x >> y;b[x][y] = 1;}for (int i = 1; i <= n; i++)//遍历{for (int j = 1; j <= n; j++){if (b[j][i]){b[j] = b[i] | b[j];}//if (b[i][j])//为啥我这样写不可以呢? 画图之后隐隐约约感觉不该这样写..具体还不知道为啥.//{// b[i] = b[i] | b[j];// //}}}for (int i = 1; i <= n; i++){ans +=b[i].count();//统计已知所有关系}cout << n * (n - 1) / 2 - (ans - n);//记得最后:所有的关系-(ans-n),因为实际所有关系中,自己到自己忽略,不应计数.return 0;
}

心得收获

1.bitset的使用
2.代码中加注释的那部分为啥不行,我还存在疑惑,大佬们可以帮忙解答下.

P2881 [USACO07MAR]Ranking the Cows G相关推荐

  1. POJ3275 Ranking the Cows【关系闭包】

    Ranking the Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3510 Accepted: 1608 Desc ...

  2. POJ 3275 Ranking the Cows (floyd传递闭包)

    Ranking the Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2248   Accepted: 1045 ...

  3. 【POJ No. 3275】奶牛排序 Ranking the Cows

    [POJ No. 3275]奶牛排序 Ranking the Cows 官方题目地址 [题意] 约翰想按照奶牛的产奶能力给它们排序. 已知有N (1≤N ≤1 000)头奶牛,而且知道这些奶牛的M ( ...

  4. P2858 [USACO06FEB]Treats for the Cows G/S 题解

    emmmmmm,第二篇文章,多多写文章,好好掌握知识! 前言 原本在educoder上刷题,刷到[粉刷匠]一题,使用区间DP来做的.自己之前曾经小部分刷过背包DP的题目,对于区间DP还是知之甚少.在稍 ...

  5. 洛谷P2881 [USACO07MAR]排名的牛Ranking the Cows(bitset Floyd)

    题意 题目链接 Sol 显然如果题目什么都不说的话需要\(\frac{n * (n - 1)}{2}\)个相对关系 然后求一下传递闭包减掉就行了 #include<bits/stdc++.h&g ...

  6. Ranking the Cows(POJ-3275 )

    Problem Description Each of Farmer John's N cows (1 ≤ N ≤ 1,000) produces milk at a different positi ...

  7. 解题报告:luoguP2868 Sightseeing Cows G(最优比率环,负环判定,二分答案)

    根据题意,我们要环上各点权值之和除以各边权值之和最大. 求最大答案,很明显可以使用二分答案.那么我们假设当前答案为 x,如果有更大的答案,那么方程就可以按下图转换: 也就是说如果有更大的答案,则有一个 ...

  8. poj 3275 Ranking the Cows 搜索

    题意:给你n个数和m个大小关系,问给出了这些大小关系之后还有多少对数的大小关系不知道. 分析:根据给出的大小关系建有向边,每次对每个点延有向边搜索到底,确定该边的所有连边关系,最后统计没有关系的边对数 ...

  9. luogu P2862 [USACO06JAN]Corral the Cows G

    题面传送门 这东西有一个更优的复杂度. 显然可以二分,二分以后对每一维尺取后算是O(nwlogw)O(nwlogw)O(nwlogw)的,可以过去. 但是我们发现在第二维尺取时的这一维www很没有必要 ...

最新文章

  1. vmware克隆centos修改linux mac地址
  2. sleep 与 wait 区别
  3. P5024 保卫王国
  4. 电脑速度太慢 重装系统不如换个帐户
  5. 8分频verilog线_解密POE交换机供电秘密,8芯网线断芯不再害怕!
  6. 自学编程的12个网站
  7. 神经网络常用激活函数总结
  8. php导出数组到csv格式demo
  9. 前端实战项目:vue+elementUI管理平台
  10. 黑苹果无线网卡的三种解决方案
  11. 阿里巴巴代码规范 学习总结
  12. linux上的离线地图,离线地图接入指南
  13. Weevely工具上传一句话木马
  14. 视频标准 - CCIR601,CCIR656
  15. vasp能带结构计算
  16. Diffusion-weighted in MRI 学习笔记
  17. 洛谷【入门3】循环结构
  18. 决策分析平台(RBP)在tomcat下的部署
  19. matlab仿真电气连接,MATLAB仿真及在电子信息与电气工程中的应用简介,目录书摘...
  20. 电脑怎么设置自动开机时间

热门文章

  1. JS报错:Uncaught ReferenceError: ShowDetail is not defined at HTMLAnchorElement.onclick
  2. 记一次支付宝支付的功能开发
  3. 移动端mobiscroll时间控件的使用
  4. “带头大哥现象”看市场监管
  5. 最好的html和css编辑器,10款顶级CSS编辑器
  6. 设计模式学习总结(二十一)--责任链模式
  7. 物理光学-4.光的偏振
  8. 2014安徽二级c语言程序设计,安徽省二级C语言程序设计笔试样题(14页)-原创力文档...
  9. 问题记录:MDK提示 Loading PDSC Debug Descriptionfailed 解决方法
  10. diea设置代码编辑区背景色为豆沙绿