• POJ 3660 Cow Contest


                                       Cow Contest
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 7156   Accepted: 3957

    Description

    N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the competitors.

    The contest is conducted in several head-to-head rounds, each between two cows. If cow A has a greater skill level than cow B (1 ≤ A ≤ N; 1 ≤ B ≤ NA ≠ B), then cow A will always beat cow B.

    Farmer John is trying to rank the cows by skill level. Given a list the results of M (1 ≤ M ≤ 4,500) two-cow rounds, determine the number of cows whose ranks can be precisely determined from the results. It is guaranteed that the results of the rounds will not be contradictory.

    Input

    * Line 1: Two space-separated integers: N and M
    * Lines 2..M+1: Each line contains two space-separated integers that describe the competitors and results (the first integer, A, is the winner) of a single round of competition: A and B

    Output

    * Line 1: A single integer representing the number of cows whose ranks can be determined
     

    Sample Input

    5 5
    4 3
    4 2
    3 2
    1 2
    2 5
    

    Sample Output

    2
    

    Source

     
     
    给出n个点 , 然后m条边的有向图
    每条边(u,v)表示u能够打败v。
    最后要给所有人排一个名次
    问有多少个人的名次的是可以确定的。
    反正n只有100,就跑一次 bellman_ford.
    然后只要i 能到达 j 的话, 都给它们连一条边。
    然后统计一次出入度之和大于等于 n - 1 (不包括 i -> i ) 的点的个数即可。 
     
     
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <map>
    #include <string>
    
    using namespace std;
    typedef long long LL;
    const int N = 110;
    const int inf = 1e7+7;
    int n , m , dis[N][N] , in_cnt[N] , out_cnt[N];
    
    void init_dis() {
        for( int i = 0 ; i <= n ; ++i ) {
            for( int j = 0 ; j <= n ; ++j ) {
                dis[i][j] = inf ;
            }
            dis[i][i] = 0 ;
        }
    }
    
    void check_dis() {
        for( int i = 1 ; i <= n ; ++i ) {
            for( int j = 1 ; j <= n ; ++j )
                if( dis[i][j] < inf )cout << dis[i][j] <<' ';
                else cout << "inf ";
            cout << endl;
        }
    }
    
    void run()
    {
        int u , v ;
        init_dis();
        while( m-- ) {
            scanf("%d%d",&u,&v);
            dis[u][v] = 1 ;
        }
        for( int k = 1 ; k <= n ; ++k ) {
            for( int i = 1 ; i <= n ; ++i ) {
                for( int j = 1 ; j <= n ; ++j ){
                    dis[i][j] = min( dis[i][j] , dis[i][k] + dis[k][j] );
                }
            }
        }
    //    check_dis();
        memset( in_cnt , 0 , sizeof in_cnt );
        memset( out_cnt , 0 , sizeof out_cnt );
        for( int i =1 ; i <= n ; ++i ) {
            for( int j = 1 ; j <= n ; ++j ){
                if( i == j || dis[i][j] >= inf ) continue ;
                out_cnt[i]++ , in_cnt[j]++;
            }
        }
        int ans = 0 ;for( int i = 1 ; i <= n ; ++i ) if( in_cnt[i] + out_cnt[i] >= n - 1 ) ans++;
        printf("%d
    ",ans);
    }
    
    int main()
    {
        #ifdef LOCAL
            freopen("in.txt","r",stdin);
        #endif // LOCAL
        ios::sync_with_stdio(false);
        while( ~scanf("%d%d",&n,&m) ) run();
    }
    View Code
     
    only strive for your goal , can you make your dream come true ?
  • 相关阅读:
    xpage 获取 附件
    Win8.1应用开发之离线缓存
    分布式系统设计系列 -- 基本原理及高可用策略
    hdu3652(数位dp)
    HDU 4869 Turn the pokers
    ubuntu 安装mysql, 以及全然又一次安装的方法
    Wildcard matching
    并发编程:创建进程 join方法 进程间的数据隔离问题 进程对象以及其他方法 守护进程 互斥锁
    网络通信 : 粘包解决的实例 socketserver模块 udp的使用 简易版QQ的实现 异常处理机制的知识点
    TCP通信: scoket模块 黏包问题 连接循环 通信循环
  • 原文地址:https://www.cnblogs.com/hlmark/p/4099004.html
Copyright © 2020-2023  润新知