描述

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. 数据库——MySQL——事务

    数据的事务是指作为单个逻辑工作单元执行的一系列操作,要么完全执行,要么完全不执行. 事务必须具备四个特性: 原子性 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚 一致性 在事务T开始时, ...

  2. 前端基础-CSS如何布局以及文档流

    一. 网页布局方式 二. 标准流 三. 浮动流 四. 定位流 一. 网页布局方式 1.什么是网页布局方式 布局可以理解为排版,我们所熟知的文本编辑类工具都有自己的排版方式, 比如word,nodpad ...

  3. IOC-AutoFac

    学习过程中参考博客: AutoFac文档:http://www.cnblogs.com/wolegequ/archive/2012/06/09/2543487.html AutoFac使用方法总结:P ...

  4. oracle 之分析函数 over (partition by ...order by ...)

    一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行. 1.分析函数和聚合函数的 ...

  5. Oracle行转列,pivot函数和unpivot函数

    pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)):unpivot函数:列转行函数: 语法:unpivot(新增值所在列的列名 for ...

  6. 竞赛题解 - NOIP2018 赛道修建

    \(\mathcal {NOIP2018}\) 赛道修建 - 竞赛题解 额--考试的时候大概猜到正解,但是时间不够了,不敢写,就写了骗分QwQ 现在把坑填好了~ 题目 (Copy from 洛谷) 题 ...

  7. 判断ARP欺骗

    转自http://bbs.51cto.com/thread-904594-1.html 网关是服务器或者单独主机设备的话 如果网关是服务器或者单独主机设备的话查询网关MAC地址要简单一些,我们只需要在 ...

  8. dmesg功能介绍

    dmesg 命令的使用范例 ‘dmesg’命令设备故障的诊断是非常重要的.在‘dmesg’命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息.‘dmesg’命令在多数 ...

  9. 导入jar包和创建jar文件

    具体步骤   导入jar包 1.在第一个工程中编写工具类并运行生成.class文件 2.在myeclipse工具栏找到open in 文件夹图标找到.class文件所在的包,将其全部复制到某个盘符下( ...

  10. python中正则表达式re模块详解

    正则表达式是处理字符串的强大工具,它有自己特定的语法结构,有了它,实现字符串的检索,替换,匹配验证都不在话下. 当然,对于爬虫来说,有了它,从HTML里提取想要的信息就非常方便了. 先看一下常用的匹配 ...