POJ 3275 Ranking the Cows(传递闭包)【bitset优化Floyd】+【领接表优化Floyd】
<题目链接>
题目大意:
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】的更多相关文章
- poj 3275 "Ranking the Cows"(DFS or Floyd+bitset<>)
传送门 题意: 农场主 FJ 有 n 头奶牛,现在给你 m 对关系(x,y)表示奶牛x的产奶速率高于奶牛y: FJ 想按照奶牛的产奶速率由高到低排列这些奶牛,但是这 m 对关系可能不能精确确定这 n ...
- POJ 3275 Ranking the cows ( Floyd求解传递闭包 && Bitset优化 )
题意 : 给出 N 头牛,以及 M 个某些牛之间的大小关系,问你最少还要确定多少对牛的关系才能将所有的牛按照一定顺序排序起来 分析 : 这些给出的关系想一下就知道是满足传递性的 例如 A > B ...
- SQL优化 MySQL版 - 单表优化及细节详讲
单表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
- SQL优化 MySQL版 - 多表优化及细节详讲
多表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
- MySQL索引优化(索引两表优化案例)
建表SQL CREATE TABLE IF NOT EXISTS `class` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT ...
- MySQL索引优化(索引单表优化案例)
1.单表查询优化 建表SQL CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUT ...
- MySQL 上亿大表优化实践
目录 背景 分析 select xxx_record语句 delete xxx_record语句 测试 实施 索引优化后 delete大表优化为小批量删除 总结 背景 XX实例(一主一从)xxx告警中 ...
- 1.mysql表优化和避免索引失效原则
表优化 1.单表优化 建立索引 根据sql的实际解析顺序建立复合索引 最佳左前缀,保持索引的定义和使用顺序一致 2.多表优化 连接查询 小表驱动大表:对于双层循环来说,外层循环(数据量)越小,内层循环 ...
- Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset
1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 323 Solved ...
随机推荐
- vue-cli3初尝试之路径别名配置
let path = require('path') function resolve(dir) { return path.join(__dirname, dir) } module.exports ...
- linux cp命令使用
功能: 复制文件或目录说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中.若同时指定多个文件或目录, ...
- 深入分析Zookeeper的实现原理
zookeeper 的由来 分布式系统的很多难题,都是由于缺少协调机制造成的.在分布式协调这块做得比较好的,有 Google 的 Chubby 以及 Apache 的 Zookeeper.Google ...
- Linux文本分析命令awk的妙用
基本用法 awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理 awk命令格式如下 awk [-F field-sep ...
- Android Studio 打开activity_main.xml不能正常显示
操作系统:Windows 10 x64 IDE:Android Studio 3.2.1 解决方法:http://www.jcodecraeer.com/a/anzhuokaifa/Android_S ...
- ajax-简单参数方法实现阴影效果
注: 简单参数 (按照参数的数量和位置传递参数) 使用时按照位置.数量传递 shadow.js函数 //简单参数实现方式/** slices:阴影* opacity:透明度* zIndex:层级* * ...
- selenium 操作键盘
send_keys(Keys.ENTER) 按下回车键send_keys(Keys.TAB) 按下Tab制表键send_keys(Keys.SPACE) 按下空格键spacesend_keys(Kye ...
- Google C++ 代码规范
Google C++ Style Guide Table of Contents Header Files Self-contained Headers The #define Guard For ...
- IDEA加载项目的设置是tomcat
- Python_网络编程udp-飞秋自动攻击
# 模拟一个接收数据import socketimport time def auto_hack(udp_socket, recv_msg, revc_ip, revc_port=2425): # 发 ...