题意:有n个bead 给出m种轻重关系 求有多少人bead肯定不可能是 in the median weight
思路: floyd 求出每个bead 与其它bead的关系 1表示比其它的重,-1表示轻于其它的。
如果它重于其它的个数,或轻于其它的个数超过一半 那它就不可能是中间的
ps:第一道自己理解的floyd 题,开心 嘻嘻!
#include <stdio.h>
#include <string.h>
#define M 105
int main ()
{
int
t,n,m,i,j,k;
int
map[M][M];
scanf
("%d",&t);
while (t
--)
{
scanf ("%d%d",&n,&m);
memset (map,0,sizeof(map));
while (m --)
{
scanf ("%d%d",&i,&j);
map[i][j] = 1;
map[j][i] = -1;
}
for (k = 1;k <= n;k ++)
for (i = 1;i <= n;i ++)
for (j = 1;j <= n;j ++)
{
if (map[i][k] == 1&&map[k][j] ==
1) //if i is heavier k and k is heavier
j,indicate i is heavier j
map[i][j] = 1;
if (map[i][k] == -1&&map[k][j] ==
-1)//·´Ö®£¬Í¬Àí
map[i][j] = -1;
}
int count = 0;
for (i = 1;i <= n;i ++)
{
int pos = 0,nes = 0;
for (j = 1;j <= n;j ++)
{
if (map[i][j] == 1)
pos ++;
if (map[i][j] == -1)
nes ++;
}
if (pos >= (n+1)/2||nes >=
(n+1)/2)
count ++;
}
printf ("%d\n",count);
}
return
0;
}
思路: floyd 求出每个bead 与其它bead的关系 1表示比其它的重,-1表示轻于其它的。
如果它重于其它的个数,或轻于其它的个数超过一半 那它就不可能是中间的
ps:第一道自己理解的floyd 题,开心 嘻嘻!
#include <stdio.h>
#include <string.h>
#define M 105
int main ()
{
}
本文介绍了一个利用Floyd算法解决珠子中位数重量问题的方法。通过建立珠子之间的轻重关系矩阵,并使用Floyd算法进行传递闭包处理,可以找出不可能成为中位数重量的珠子。
1651

被折叠的 条评论
为什么被折叠?



