zoukankan      html  css  js  c++  java
  • POJ 3660 Cow Contest (dfs)

    Cow Contest
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 11129   Accepted: 6183

    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 ≤ AN; 1 ≤ BN; AB), 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

    【分析】给你一些关系,例如输入u,v,表示u排在v的前面,然后问你有哪些人的排名是可以确定的。
     首先可以看出这些关系最终组成了一个有向无环图,也就是说输入u,v,u-->v;我们对于每个人查找确定排在他前面的人的个数和确定排在他后面的人的个数,
    如果加起来连同他自己==n,那么说明这个人的排名确定了,那么怎么确定有多少人一定排在他前面呢?我们建两个图,一个顺序,一个逆序,然后分开找就行了。
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <time.h>
    #include <string>
    #include <map>
    #include <stack>
    #include <vector>
    #include <set>
    #include <queue>
    #define inf 10000000
    #define mod 10000
    typedef long long ll;
    using namespace std;
    const int N=605;
    const int M=50000;
    int power(int a,int b,int c){int ans=1;while(b){if(b%2==1){ans=(ans*a)%c;b--;}b/=2;a=a*a%c;}return ans;}
    int in[N],vis[N];
    int n,m,k;
    vector<int>vec[N],edg[N];
    int dfs1(int x)
    {
        vis[x]=1;
        int ans=1;
        for(int i=0;i<vec[x].size();i++){
            int v=vec[x][i];
            if(!vis[v])ans+=dfs1(v);
        }
        return ans;
    }
    int dfs2(int x)
    {
        int ans=1;
        vis[x]=1;
        for(int i=0;i<edg[x].size();i++){
            int v=edg[x][i];
            if(!vis[v])ans+=dfs2(v);
        }
        return ans;
    }
    int main()
    {
        int u,v,ans=0;;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++){
            scanf("%d%d",&u,&v);
            vec[u].push_back(v);
            edg[v].push_back(u);
        }
        for(int i=1;i<=n;i++){
            memset(vis,0,sizeof vis);
            int ret1=dfs1(i);
            memset(vis,0,sizeof vis);
            int ret2=dfs2(i);
            //printf("!!%d %d
    ",ret1,ret2);
            if(ret1+ret2==n+1)ans++;
        }
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    Mac上的USB存储设备使用痕迹在新版操作系统有所变化
    Beware of the encrypted VM
    A barrier for Mobile Forensics
    Second Space could let suspect play two different roles easily
    Take advantage of Checkra1n to Jailbreak iDevice for App analysis
    Find out "Who" and "Where"
    Where is the clone one and how to extract it?
    Downgrade extraction on phones running Android 7/8/9
    高版本安卓手机的取证未来
    How to extract WeChat chat messages from a smartphone running Android 7.x or above
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6666156.html
Copyright © 2011-2022 走看看