• POJ 3660 Cow Contest 弗洛伊德


    题意难懂是POJ的标配,这都TM赖本泽马。

    题意:有N头牛进行了M场比赛,比赛双方是A - B 且总是A赢(前面的那个数赢),如果说A赢B,B赢C 则可以确定A赢C。问最终多少头牛的排名可以确定。

    思路:用弗洛伊德判读每两点之间是否有输赢关系(INF表示没关系),如果某个点与所有点都有输赢关系,则这个点的排名可以确定。

    #include<stdio.h>
    #include<string.h>
    #include<cstring>
    #include<string>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    #include<iostream>
    #include<stdlib.h>
    #include<cmath>
    
    #define INF 0x3f3f3f3f
    #define MAX 1005
    
    using namespace std;
    
    int Map[MAX][MAX],n,vis[MAX],dist[MAX],m;
    
    int ford()
    {
        int i,j,k,sum,ans=0;
    
        for(k=1;k<=n;k++)
        {
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                {
                    if(Map[i][j] > Map[i][k]+Map[k][j])
                        Map[i][j] = Map[i][k]+Map[k][j];
                }
            }
        }
    
        for(i=1;i<=n;i++)
        {
            sum=0;
            for(j=1;j<=n;j++)
            {
                if((Map[i][j]!=INF || Map[j][i]!=INF) && i!=j)
                    sum++;
            }
    
            if(sum==n-1)
                ans++;
        }
    
        return ans;
    }
    
    int main()
    {
        int i,j,a,b;
    
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(Map,INF,sizeof(Map));
    
            for(i=1;i<=m;i++)
            {
                scanf("%d%d",&a,&b);
                Map[a][b]=1;
            }
    
            int ans=ford();
    
            printf("%d
    ",ans);
        }
    }
    

      

  • 相关阅读:
    c#之字段,属性,索引器,常量
    c#类,对象,类成员简介
    c#之接口,依赖反转,单元测试
    c#之 抽象类与开闭原则
    c#重写与多态
    c#之类
    c#之类的继承,类成员的访问控制
    c#之委托
    c# try catch用法思路
    js的全局变量
  • 原文地址:https://www.cnblogs.com/alan-W/p/5665791.html
Copyright © 2020-2023  润新知