poj 1975 Median Weight Bead(floy…

本文介绍了一个利用Floyd算法解决珠子中位数重量问题的方法。通过建立珠子之间的轻重关系矩阵,并使用Floyd算法进行传递闭包处理,可以找出不可能成为中位数重量的珠子。
题意:有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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值