zoukankan      html  css  js  c++  java
  • 【BZOJ】1612: [Usaco2008 Jan]Cow Contest奶牛的比赛(floyd/dfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1612

    赢+输==n-1 则一定确定

    dfs和floyd都行(dfs我不确定,因为我没提交,权限还没开啊囧。。。可能要过两天了。。)

    dfs:

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define rep(i, n) for(int i=0; i<(n); ++i)
    #define for1(i,a,n) for(int i=(a);i<=(n);++i)
    #define for2(i,a,n) for(int i=(a);i<(n);++i)
    #define for3(i,a,n) for(int i=(a);i>=(n);--i)
    #define for4(i,a,n) for(int i=(a);i>(n);--i)
    #define CC(i,a) memset(i,a,sizeof(i))
    #define read(a) a=getint()
    #define print(a) printf("%d", a)
    #define dbg(x) cout << #x << " = " << x << endl
    #define rdm(x) for(int i=ihead[x]; i; i=e[i].next)
    #define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
    inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
    inline const int max(const int &a, const int &b) { return a>b?a:b; }
    inline const int min(const int &a, const int &b) { return a<b?a:b; }
    
    const int N=105;
    int win[N], los[N], ihead[N], cnt, n, m, vis[N];
    struct ED { int to, next; }e[N*N];
    void add(int u, int v) {
    	e[++cnt].next=ihead[u]; ihead[u]=cnt; e[cnt].to=v;
    }
    int dfs(int x) {
    	++los[x];
    	int s=0;
    	vis[x]=1;
    	rdm(x) if(!vis[e[i].to]) s+=dfs(e[i].to);
    	return s+1;
    }
    int main() {
    	read(n); read(m);
    	int u, v;
    	while(m--) {
    		read(u); read(v);
    		add(u, v);
    	}
    	int ans=0;
    	for1(i, 1, n) { 
    		CC(vis, 0); --los[i];
    		win[i]=dfs(i)-1;
    	}
    	for1(i, 1, n)
    		if(win[i]+los[i]==n-1) ++ans;
    	print(ans);
    	return 0;
    }
    

    Description

    FJ的N(1 <= N <= 100)头奶牛们最近参加了场程序设计竞赛:)。在赛场上, 奶牛们按1..N依次编号。每头奶牛的编程能力不尽相同,并且没有哪两头奶牛的 水平不相上下,也就是说,奶牛们的编程能力有明确的排名。 整个比赛被分成了若干轮,每一轮是两头指定编号的奶牛的对决。如果编号 为A的奶牛的编程能力强于编号为B的奶牛(1 <= A <= N; 1 <= B <= N; A != B) ,那么她们的对决中,编号为A的奶牛总是能胜出。 FJ想知道奶牛们编程能力的具体排名,于是他找来了奶牛们所有 M(1 <= M <= 4,500)轮比赛的结果,希望你能根据这些信息,推断出尽可能多的 奶牛的编程能力排名。比赛结果保证不会自相矛盾。

    Input

    * 第1行: 2个用空格隔开的整数:N 和 M * 第2..M+1行: 每行为2个用空格隔开的整数A、B,描述了参加某一轮比赛的奶 牛的编号,以及结果(编号为A,即为每行的第一个数的奶牛为 胜者) * 第1行: 输出1个整数,表示排名可以确定的奶牛的数目

    Output

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

    Sample Input

    2

    输出说明:

    编号为2的奶牛输给了编号为1、3、4的奶牛,也就是说她的水平比这3头奶
    牛都差。而编号为5的奶牛又输在了她的手下,也就是说,她的水平比编号为5的
    奶牛强一些。于是,编号为2的奶牛的排名必然为第4,编号为5的奶牛的水平必
    然最差。其他3头奶牛的排名仍无法确定。

    Sample Output

     

    HINT

    Source

  • 相关阅读:
    UGUI ScrollView 自适应高度
    OnApplicationFocus 与 OnApplicationPause
    unity读取二进制配置文件
    sprite实现影子
    protobuf 标签DataFormat =DataFormat.FixedSize解决连续int字段无法解析
    unity显示网络延迟ping
    ios piv6遭拒绝
    读取FTP上的某个文本文档内容到本地
    EF提交插入数据catch捕获具体异常方法
    ASP.NET后台调用API 方法 POST方式
  • 原文地址:https://www.cnblogs.com/iwtwiioi/p/3950643.html
Copyright © 2011-2022 走看看