<题目链接>

题目大意:
FJ想按照奶牛产奶的能力给她们排序。现在已知有N头奶牛$(1 ≤ N ≤ 1,000)$。FJ通过比较,已经知道了M$1 ≤ M ≤ 10,000$对相对关系。每一对关系表示为“X Y”,意指X的产奶能力强于Y。现在FJ想要知道,他至少还要调查多少对关系才能完成整个排序。

解题分析:

因为完全图只需要$n*(n-1)/2$对关系就能确定所有的所有节点的顺序,所以这里我们只需要求出传递闭包之后,能够确定的关系数,然后相减即可。因为本题 $n\leq10^3$,$O(n^3)$的Floyd复杂度过高,所以这里用到了bitset优化。同时,因为本题边非常少$m\leq10^4$,所以本题还可以用领接表优化Floyd。

bitset优化Floyd

#include <cstdio>
#include <cstring>
#include <bitset>
#include <algorithm>
using namespace std; const int N = 1e3+;
bitset<N>b[N]; int main(){
int n,m;
while(~scanf("%d%d",&n,&m)){
memset(b,,sizeof(b));
for(int i=;i<=m;i++){
int u,v;scanf("%d%d",&u,&v);
b[u].set(v);
}
for(int j=;j<=n;j++){
for(int i=;i<=n;i++){
if(b[i][j])b[i]|=b[j]; //Floyd传递闭包
}
}
int ans=;
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(b[i][j])ans++; //ans为传递闭包之后,全图的关系对
}
}
printf("%d\n",n*(n-)/-ans); //n*(n-1)/2为完全图所需的关系对,减去当前图的关系对之后,就是需要添加的关系对
}
}

领接表优化Floyd

#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std; #define pb push_back
const int N = 1e3+;
vector<int>from[N],to[N];
bool mp[N][N];
int n,m; void init(){
memset(mp,false,sizeof(mp));
for(int i=;i<=n;i++){
from[i].clear();to[i].clear();
}
}
void addedge(int u,int v){
mp[u][v]=true;
from[v].pb(u),to[u].pb(v);
}
int main(){
while(~scanf("%d%d",&n,&m)){
init();
for(int i=;i<=m;i++){
int u,v;scanf("%d%d",&u,&v);
addedge(u,v);
}
for(int k=;k<=n;k++){
for(int i=;i<from[k].size();i++){ //能够直接到达k的点
for(int j=;j<to[k].size();j++){ //能够由k直接到达的点
int u=from[k][i],v=to[k][j];
if(!mp[u][v])addedge(u,v); //只用更新那些没有传递关系的点
}
}
}
int ans=;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(mp[i][j])ans++;
printf("%d\n",n*(n-)/-ans);
}
}

2019-03-07

POJ 3275 Ranking the Cows(传递闭包)【bitset优化Floyd】+【领接表优化Floyd】的更多相关文章

  1. poj 3275 "Ranking the Cows"(DFS or Floyd+bitset<>)

    传送门 题意: 农场主 FJ 有 n 头奶牛,现在给你 m 对关系(x,y)表示奶牛x的产奶速率高于奶牛y: FJ 想按照奶牛的产奶速率由高到低排列这些奶牛,但是这 m 对关系可能不能精确确定这 n ...

  2. POJ 3275 Ranking the cows ( Floyd求解传递闭包 && Bitset优化 )

    题意 : 给出 N 头牛,以及 M 个某些牛之间的大小关系,问你最少还要确定多少对牛的关系才能将所有的牛按照一定顺序排序起来 分析 : 这些给出的关系想一下就知道是满足传递性的 例如 A > B ...

  3. SQL优化 MySQL版 - 单表优化及细节详讲

    单表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...

  4. SQL优化 MySQL版 - 多表优化及细节详讲

    多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...

  5. MySQL索引优化(索引两表优化案例)

    建表SQL CREATE TABLE IF NOT EXISTS `class` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT ...

  6. MySQL索引优化(索引单表优化案例)

    1.单表查询优化 建表SQL CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUT ...

  7. MySQL 上亿大表优化实践

    目录 背景 分析 select xxx_record语句 delete xxx_record语句 测试 实施 索引优化后 delete大表优化为小批量删除 总结 背景 XX实例(一主一从)xxx告警中 ...

  8. 1.mysql表优化和避免索引失效原则

    表优化 1.单表优化 建立索引 根据sql的实际解析顺序建立复合索引 最佳左前缀,保持索引的定义和使用顺序一致 2.多表优化 连接查询 小表驱动大表:对于双层循环来说,外层循环(数据量)越小,内层循环 ...

  9. Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset

    1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 323  Solved ...

随机推荐

  1. springboot第一个项目【mybatis】

    1.resources下添加spring 添加spring-context.xml,设置controller的路径,以及引入数据库配置 <beans xmlns="http://www ...

  2. Confluence 6 查看一个任务的执行历史

    希望查看一个计划任务最后运行的时间和这个计划任务最后一次运行花费了多长时间.单击计划任务边上的 历史(History )连接. 如果一个计划任务从来没有运行的胡啊,那么这个历史的链接是不会显示的. 屏 ...

  3. Confluence 6 数据库整合的限制

    数据库整合的限制 注意: Confluence 自带的 XML 方式导出方法并不适用于备份和整合大数据集.这里有一些第三方的数据库工具你可以使用能够帮助你对大数据集进行备份和整合.如果你在选择正确工具 ...

  4. RemoveDuplicatesfromSortedList

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...

  5. kafka架构浅显理解

    Kafka的概念: 1. AMQP协议 Advanced Message Queuing Protocol (高级消息队列协议) The Advanced Message Queuing Protoc ...

  6. lightoj 1282 取对数的操作

    /* 前三位 len=log10n^k(乘积的长度) len=klog10n n^k=x*10^(len-1) x=n^k/10^(len-1) log10x = k*log10n - (len-1) ...

  7. C语言实现split以某个字符分割一个字符串

    方式一: 使用strtok # include <string.h> # include <stdio.h> void split(char *src,const char * ...

  8. Android SQLite用法

    1.创建SQLite数据库 需要自己创建一个类来继承SQLiteOpenHelper类 SQLiteOpenHelper类是一个创建SQLite数据库的辅助类 继承此类的时候需要重写三个方法 publ ...

  9. Spring.Net 简单实例-01(IOC)

    1.话不多说看操作.新建"Windows窗体应用程序" 2:通过配置文件创建IOC容器 首先引入安装包 3:定义一个接口(更好的体现封装性,当然也可以直接使用类) 定义一个类,实现 ...

  10. ubuntu下如何编译C语言

    ubuntu下如何编译C语言     如果没有gcc编译器的话,使用以下命令获取 ~# sudo apt-get install gcc同时要下载辅助工具 ~# sudo apt-get instal ...