描述

There are N beads which of the same shape and size, but with different weights. N is an odd number and the beads are labeled as 1, 2, ..., N. Your task is to find the bead whose weight is median (the ((N+1)/2)th among all beads). The following comparison has been performed on some pairs of beads:
A scale is given to compare the weights of beads. We
can determine which one is heavier than the other between two beads. As
the result, we now know that some beads are heavier than others. We are
going to remove some beads which cannot have the medium weight.

For example, the following results show which bead is heavier after M comparisons where M=4 and N=5.

.    Bead  is heavier than Bead .
. Bead is heavier than Bead .
. Bead is heavier than Bead .
. Bead is heavier than Bead .

From the above results, though we cannot determine exactly which is the median bead, we know that Bead 1 and Bead 4 can never have the median weight: Beads 2, 4, 5 are heavier than Bead 1, and Beads 1, 2, 3 are lighter than Bead 4. Therefore, we can remove these two beads.

Write a program to count the number of beads which cannot have the median weight.

输入

The first line of the input file contains a single integer t (1 <= t <= 11), the number of test cases, followed by the input data for each test case. The input for each test case will be as follows:
The
first line of input data contains an integer N (1 <= N <= 99)
denoting the number of beads, and M denoting the number of pairs of
beads compared. In each of the next M lines, two numbers are given where
the first bead is heavier than the second bead.

输出

There should be one line per test case. Print the number of beads which can never have the medium weight.

样例输入


样例输出

2

来源

Tehran Sharif 2004 Preliminary

题解

翻译

这种题拿到的第一反应也就是交给谷歌之类的吧…

【问题描述】
有N颗形状和大小都一致的珍珠,它们的重量不相同。N为整数,所有的珍珠从1到N编号。

你的任务是发现哪颗珍珠的重量刚好处于正中间,即所有珍珠的重量中,该珍珠的重量列(N+1)/2位。

下面给出将一对珍珠进行比较的方法:
给你一架天平用来比较珍珠的重量,我们可以比出两个珍珠哪个更重一些,在作出一系列的比较后,我们可以将一些肯定不具备中间重量的拿走。
例如,下列给出对5颗珍珠进行四次比较的情况:
珍珠2比珍珠1重;
珍珠4比珍珠3重;
珍珠5比珍珠1重;
珍珠4比珍珠2重;
根据以上结果,虽然我们不能精确的的出哪个珍珠具有中间重量,但我们可以肯定珍珠1和珍珠4不可能具有中间重量,因为珍珠2,4,5比1重,而珍珠1,2,3比4轻,所以我们可以移走这两颗珍珠。
写一个程序统计出共有多少颗珍珠肯定不会是中间重量。
【输入格式】
输入第1行表示有多组测试用例,每组测试用例第1行包含两个用空格隔开的整数N和M,其中1<=N<=99,且N为奇数,M表示对珍珠进行比较的次数,接下来M行每行包含两个用空格隔开的整数x和y,表示珍珠x比y重。
【输出格式】
每组测试用例,输出仅一行,包含一个整数,表示不可能是中间重量的珍珠总数
【输入样例】
1
5 4
2 1
4 3
5 1
4 2
【输出样例】

2

解析

是一道Floyd算法可解的题。因为题目多源,故使用此算法。

首先需要明确,当有一半珍珠比它重或一半珍珠比它轻的时候,那这枚珍珠也就没什么可能是中间那颗了。

因此我们需要用Floyd算法为我们的邻接表做个排序,之后遍历统计比这枚珍珠重和轻的数量,再与半数Half相比即可。

 #include<iostream>
#include<cstring>
//Floyd
using namespace std;
const int MAXN=;
bool map[MAXN][MAXN];
int count[MAXN];
int main(){
int t;
scanf("%d",&t);
int n,m;
int a,b;
int half;
while(t--){
memset(map,,sizeof(map));
memset(count,,sizeof(count));
scanf("%d%d",&n,&m);
half=(n+)/;
for(int i=;i<=m;i++){
scanf("%d%d",&a,&b);
map[a][b]=true;//表示a珍珠比b珍珠要重
}
for(int k=;k<=n;k++){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(k!=i&&i!=j&&j!=k){
if(map[i][k]&&map[k][j]){
map[i][j]=true;
}
}
}
}
}
for(int i=,flag=;i<=n;i++,flag=){
for(int j=;j<=n;j++){
if(map[i][j]){
count[i]++;
}
}
if(count[i]>=half){
count[]++;
}
else{
for(int j=;j<=n;j++){
if(map[j][i]){
flag++;
}
}
if(flag>=half){
count[]++;
}
}
}
printf("%d\n",count[]);
}
}

珍珠 Median Weight Bead 977的更多相关文章

  1. POJ-1975 Median Weight Bead(Floyed)

    Median Weight Bead Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3162 Accepted: 1630 De ...

  2. POJ 1975 Median Weight Bead

    Median Weight Bead Time Limit: 1000ms Memory Limit: 30000KB This problem will be judged on PKU. Orig ...

  3. Median Weight Bead(最短路—floyed传递闭包)

    Description There are N beads which of the same shape and size, but with different weights. N is an ...

  4. POJ1975 Median Weight Bead floyd传递闭包

    Description There are N beads which of the same shape and size, but with different weights. N is an ...

  5. poj 1975 Median Weight Bead(传递闭包 Floyd)

    链接:poj 1975 题意:n个珠子,给定它们之间的重量关系.按重量排序.求确定肯定不排在中间的珠子的个数 分析:由于n为奇数.中间为(n+1)/2,对于某个珠子.若有至少有(n+1)/2个珠子比它 ...

  6. Median Weight Bead_floyd

    Description There are N beads which of the same shape and size, but with different weights. N is an ...

  7. 第十届山东省赛L题Median(floyd传递闭包)+ poj1975 (昨晚的课程总结错了,什么就出度出度,那应该是叫讨论一个元素与其余的关系)

    Median Time Limit: 1 Second Memory Limit: 65536 KB Recall the definition of the median of elements w ...

  8. 别人整理的DP大全(转)

    动态规划 动态规划 容易: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  9. [转] POJ DP问题

    列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 13 ...

随机推荐

  1. Azure服务器上不了外网

    将服务器的DNS改成223.5.5.5或者223.6.6.6

  2. JQuery给一个元素绑定两次点击事件(第二次点击事件)

    由于项目的要求,需要给复选框设置样式,初始样式:,第一次点击的时候显示,第二次点击时候需要改变该样式:. 设计思路: 当点击次数为奇数时显示带有颜色的图片 当点击次数为偶数时显示没有颜色的图片 下边是 ...

  3. js取整、四舍五入等数学函数

    js只保留整数,向上取整,四舍五入,向下取整等函数1.丢弃小数部分,保留整数部分parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math. ...

  4. iOS 从零到一搭建组件化项目框架

    随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手术的动刀口 ...

  5. LeetCode 中级 -二叉树的层次遍历(102)

    题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 ...

  6. Wireshark抓取Mqtt报文

    安装版本较高的Wireshark,我的版本是2.4.6,然后在编辑--> 首选项--> 协议中找到MQTT,然后将端口改为你MQTT服务器的端口,然后就可以在抓包中抓到MQTT了

  7. mysql alter 增加修改表结构及约束

    1) 加索引,添加时若未指定索引名,默认为字段名   mysql> alter table 表名 add index 索引名 (字段名1[,字段名2 …]); 例子: mysql> alt ...

  8. vue-cli3 vue.config.js 配置

    // cli_api配置地址 https://cli.vuejs.org/zh/config/ module.exports = { baseUrl: './', // 部署应用包时的基本 URL o ...

  9. TinyMCE插件:RESPONSIVE filemanager 9 文件名统一格式化

    上传图片方法(filemanager/UploadHandler.php) 在上传图片的函数中查看,发现$file->name是一个完整的[文件名.后缀名],所以使用explode(),文件名和 ...

  10. CentOS7 LNMP+phpmyadmin环境搭建(二、LNMP环境搭建)

    上一篇博客我们在虚拟机上安装了centos7,接下来,就开始安装lnmp环境吧. 还是跟之前一样,进入命令行后,先使用su命令切换到root权限. 首先配置防火墙  CentOS 7.0默认使用的是f ...