珍珠 Median Weight Bead 977
描述
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的更多相关文章
- POJ-1975 Median Weight Bead(Floyed)
Median Weight Bead Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3162 Accepted: 1630 De ...
- POJ 1975 Median Weight Bead
Median Weight Bead Time Limit: 1000ms Memory Limit: 30000KB This problem will be judged on PKU. Orig ...
- Median Weight Bead(最短路—floyed传递闭包)
Description There are N beads which of the same shape and size, but with different weights. N is an ...
- POJ1975 Median Weight Bead floyd传递闭包
Description There are N beads which of the same shape and size, but with different weights. N is an ...
- poj 1975 Median Weight Bead(传递闭包 Floyd)
链接:poj 1975 题意:n个珠子,给定它们之间的重量关系.按重量排序.求确定肯定不排在中间的珠子的个数 分析:由于n为奇数.中间为(n+1)/2,对于某个珠子.若有至少有(n+1)/2个珠子比它 ...
- Median Weight Bead_floyd
Description There are N beads which of the same shape and size, but with different weights. N is an ...
- 第十届山东省赛L题Median(floyd传递闭包)+ poj1975 (昨晚的课程总结错了,什么就出度出度,那应该是叫讨论一个元素与其余的关系)
Median Time Limit: 1 Second Memory Limit: 65536 KB Recall the definition of the median of elements w ...
- 别人整理的DP大全(转)
动态规划 动态规划 容易: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...
- [转] POJ DP问题
列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 13 ...
随机推荐
- React Native开发中自动打包脚本
React Native开发中自动打包脚本 在日常的RN开发中,我们避免不了需要将我们编写的代码编译成安装包,然后生成二维码,供需要测试的人员扫描下载.但是对于非原生的开发人员来说,可能不知如何使用X ...
- windows下3D文字
windows下3D文字 简单概述 需要在每一帧的视频图像上面添加3D文字,文字可以自由移动位置,变换各种字体属性,还能进行一些简单动画.然后把处理好的视频图像传个下一个步骤去处理.做的过程中参考了G ...
- hdu 1394 Minimum Inversion Number(逆序数对) : 树状数组 O(nlogn)
http://acm.hdu.edu.cn/showproblem.php?pid=1394 //hdu 题目 Problem Description The inversion number ...
- BZOJ2298: [HAOI2011]problem a(带权区间覆盖DP)
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1747 Solved: 876[Submit][Status][Discuss] Descripti ...
- Docker环境搭建以及基本操作
Docker环境搭建以及基本操作 Docker环境基本搭建: 基础环境:Centos 7.4 IP:192.168.30.117 [root@docker ~]# cat /etc/re ...
- 解决IDEA打印到控制台的中文内容乱码
File-->Settings-->Editor-->File Encodings->将图中内容均设置为UTF-8--->点击+号选中自己的项目->Apply--& ...
- Java代码注释
单行注释: 选中代码,按下ctrl+/ 一条代码单行注释:选中一条代码按下ctrl+/,则为一条代码单行注释: 多条代码单行注释:选中多条代码按下ctrl+/,则为多条代码单行注释: 取消注释:对已经 ...
- 论反向ajax
在讨论反向ajax之前,说一下我大二写的一个聊天程序,通过前端ajax不断向服务器发送请求(通过http连接),服务器进行一次数据库查询,然后返回结果,断开与服务器的链接(绝大部分都是无用的结果)来维 ...
- python生成器函数中return的作用
当生成器函数中含有return时,return不会返回任何值,会直接终止当前生成器,对yield的作用没有影响,当函数执行到return时候,调用next()来执行生成器则会报错,如果使用for循环遍 ...
- Manjaro Linux KDE个人的一些安装配置
安装manjaro kde linux的个人步骤 1 换源 1.1 自动寻找最快的源 sudo pacman-mirrors -i -c China -m rank 1.2 修改源文件 sudo ge ...