• Cow Contest POJ


    题意

    有n(1<=n<=100)个学生参加编程比赛。
    给出m条实力信息。(1<=M<=4500)
    其中每一条的格式为 A B (1<=A<=N,1<=B<=N,A!=B) 意思是A的实力比B强。
    如果A比B强且B比C强,那么A一定比C强。
    问最后有多少名学生可以确定他的排名。
    保证输入信息不存在矛盾


    题解

    n<=100!!!

    若A强于B则A向B连一条单向边
    直接强行floyed判断连通性,如果这个点能到达的点数和能到达它的点数和为n-1则说明它的排名是确定的


    常数巨大的代码

    # include <stdio.h>
    # include <stdlib.h>
    # include <iostream>
    # include <string.h>
    # define IL inline
    # define RG register
    # define mem(a, b) memset(a, b, sizeof(a))
    # define Max(a, b) (((a) > (b)) ? (a) : (b))
    # define Min(a, b) (((a) < (b)) ? (a) : (b))
    using namespace std;
    
    IL int Get(){
        RG char c = '!'; RG int x = 0, z = 1;
        for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
        for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
        return x * z;
    }
    
    const int MAXN = 101;
    int n, m, flag, ans, vis[MAXN], map[MAXN][MAXN];
    
    int main(){
        n = Get(); m = Get();
        for(RG int i = 1; i <= m; i++)
            map[Get()][Get()] = 1;
        for(RG int k = 1; k <= n; k++)
            for(RG int i = 1; i <= n; i++)
                for(RG int j = 1; j <= n; j++)
                    map[i][j] |= (map[i][k] & map[k][j]);
        for(RG int i = 1; i <= n; i++)
            for(RG int j = 1; j <= n; j++)
                vis[j] += map[i][j], vis[i] += map[i][j];
        for(RG int i = 1; i <= n; i++)
            ans += (vis[i] == n - 1);
        printf("%d
    ", ans);
        return 0;
    }
  • 相关阅读:
    CMDB 理论
    分布式
    闲着无聊 一个python的,三级菜单。装逼版。
    献上一段,派遣网易云音乐,音频的代码。
    redis 安装
    selenium之 chromedriver与chrome版本映射表(更新至v2.46)
    简单的爬虫
    anaconda使用方法
    crm开发之用户重置密码
    模块和包,logging模块
  • 原文地址:https://www.cnblogs.com/cjoieryl/p/8206407.html
Copyright © 2020-2023  润新知