题目背景

[Usaco2008 Jan]

题目描述

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 ≤ N; A ≠ 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.

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

输入输出格式

输入格式:

第1行: 2个用空格隔开的整数:N 和 M

第2..M+1行: 每行为2个用空格隔开的整数A、B,描述了参加某一轮比赛的奶 牛的编号,以及结果(编号为A,即为每行的第一个数的奶牛为 胜者)

输出格式:

第1行: 输出1个整数,表示排名可以确定的奶牛的数目

输入输出样例

输入样例#1:

5 5
4 3
4 2
3 2
1 2
2 5
输出样例#1:

2

说明

输出说明:

编号为2的奶牛输给了编号为1、3、4的奶牛,也就是说她的水平比这3头奶

牛都差。而编号为5的奶牛又输在了她的手下,也就是说,她的水平比编号为5的

奶牛强一些。于是,编号为2的奶牛的排名必然为第4,编号为5的奶牛的水平必

然最差。其他3头奶牛的排名仍无法确定。

屠龙宝刀点击就送

做法1 floyd

若与点i连通的点的个数等于n-1(除了他) 那么他的排名就可以确认

#include <cstdio>
#include <vector>
#define N 105
using namespace std;
int ans[N],n,m;
int Map[N][N];
int main()
{
scanf("%d%d",&n,&m);
for(int a,b;m--;)
{
scanf("%d%d",&a,&b);
Map[a][b]=;
}
for(int k=;k<=n;++k)
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
Map[i][j]=Map[i][k]&Map[k][j]|Map[i][j];//==if(Map[i][k]&&Map[k][j]) Map[i][j]=1;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
if(Map[i][j]) ans[i]++,ans[j]++;
int Answer=;
for(int i=;i<=n;++i) if(ans[i]==n-) Answer++;
printf("%d\n",Answer);
return ;
}

做法2

并查集+拓扑排序

如果一个点可以被唯一确定,那么所有点一定属于一个连通块 可以想到并查集

如果满足不了上面那个 那就要拓扑排序了

Map数组指胜负关系 path数组指可确定的排名关系

#include <cstdio>
#include <vector>
#include <queue>
#define N 105 using namespace std;
int fa[N],rd[N],Map[N][N],path[N][N],n,m;
int find_(int x) {return x==fa[x]?x:fa[x]=find_(fa[x]);}
int tppx()
{
int ret=,que[N<<],l=,r=;
for(int i=;i<=n;++i) if(!rd[i]) que[++r]=i;
for(int now;l<r;)
{
now=que[++l];
if(l==r)
{
int i=;
for(i=;i<=r;++i) if(path[now][que[i]]==) break;
if(i==r+) ret++;
}
for(int i=;i<=n;++i)
if(Map[now][i])
{
if(rd[i])
{
rd[i]--;
if(!rd[i]) que[++r]=i;
for(int j=;j<=r;++j) path[i][que[j]]|=path[now][que[j]];//==if(path[now][que[j]]) path[i][que[j]]=1;
}
}
}
return ret;
}
int main()
{
scanf("%d%d",&n,&m);
for(int x,y,i=;i<=m;++i)
{
scanf("%d%d",&x,&y);
fa[find_(y)]=find_(x);
rd[y]++;
Map[x][y]=;
}
int k=;
for(int i=;i<=n;++i) {if(fa[i]==i) k++;path[i][i]=;}
if(k>) printf("0\n");
else printf("%d\n",tppx());
return ;
}

洛谷 P2419 [USACO08JAN]牛大赛Cow Contest的更多相关文章

  1. 洛谷—— P2419 [USACO08JAN]牛大赛Cow Contest

    https://www.luogu.org/problem/show?pid=2419 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, convenie ...

  2. floyd的魔改应用——洛谷P2419 [USACO08JAN]牛大赛Cow Contest 题解

    想找原题请点击这里:传送门 原题: 题目背景 [Usaco2008 Jan] 题目描述 N ( ≤ N ≤ ) cows, conveniently numbered ..N, are partici ...

  3. 洛谷P2419 [USACO08JAN]牛大赛Cow Contest

    对于一个能够确定名次的点,可以注意到,对于该点,入度和出度的数量加起来等于N-1(这样还是不够准确的确切的说是,能够到达这个点的数量和这个点能够到达的数量的和 floyd不仅可以求两个点之间的最短路径 ...

  4. bzoj1612 / P2419 [USACO08JAN]牛大赛Cow Contest(Floyd)

    P2419 [USACO08JAN]牛大赛Cow Contest Floyd不仅可以算最短路,还可以处理点之间的关系. 跑一遍Floyd,处理出每个点之间是否有直接或间接的关系. 如果某个点和其他$n ...

  5. P2419 [USACO08JAN]牛大赛Cow Contest

    P2419 [USACO08JAN]牛大赛Cow Contest 题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently number ...

  6. Luogu P2419 [USACO08JAN]牛大赛Cow Contest

    题目背景 [Usaco2008 Jan] 题目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a p ...

  7. P2419 [USACO08JAN]牛大赛Cow Contest(dfs走天下/)

    题目描述 FJ的N(1 <= N <= 100)头奶牛们最近参加了场程序设计竞赛:).在赛场上,奶牛们按1..N依次编号.每头奶牛的编程能力不尽相同,并且没有哪两头奶牛的水平不相上下,也就 ...

  8. [USACO08JAN]牛大赛Cow Contest

    OJ题号:洛谷2419 思路: Floyd求有向图的传递闭包,只要该点与其他所有点相连即可确定名次. #include<cstdio> #include<cstring> in ...

  9. luogu题解 P2419 【牛大赛Cow Contest】传递丢包

    题目链接: https://www.luogu.org/problemnew/show/P2419 分析: "在交际网络中,给定若干元素和若干对二元关系,且关系具有传递性. 通过传递性推导出 ...

随机推荐

  1. SSIS 增量更新

    本文转自 http://sqlblog.com/blogs/andy_leonard/archive/2007/07/09/ssis-design-pattern-incremental-loads. ...

  2. 2、webpack基础配置

    我们需要安装webpack 还需要安装webpack cli 这两个都是我们的开发依赖 这里我们一般会加一个-D表示上线的时候不需要他们两个包 安装我们的webpack 先初始化一下,记住我们的安装依 ...

  3. 11.ClientCredential模式总结

    11.ClientCredential模式总结 服务端定义的Resource叫做api Resource API默认是被保护的 第三方的客户端先去请求 Server拿到access token.带着t ...

  4. Lightoj1012【DFS】

    题意: 输出和' @ '相连有多少个' . '包括' @ ',' # '代表墙不能走: 思路: 基础DFS,找到起点,然后跑一下DFS就好了: #include<cstdio> #incl ...

  5. Ruby测试小代码[计算50以内的素数]

    算法思想 判断某一个数,能不能被比他平方根小的素数整除. 首先看看代码 $arr = [] $arr[0] = 2 def add_prime(n) 3.step(n,2){|num| $arr &l ...

  6. NSString 是否存在空格

    NSString *_string = [NSString stringWithFormat:@"123 456"]; NSRange _range = [_string rang ...

  7. css-float浮动详细

    前言 pc端的页面为了保持良好的兼容性,一般会使用css2部分就支持的浮动(float)和定位(postion)来布局.浮动行为怪异,但有迹可循.以下下是在css揭秘一书中总结的浮动内幕. 包含块:浮 ...

  8. 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记

    在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. Larav ...

  9. vmware vSAN 入门

    参考:https://docs.vmware.com/cn/VMware-vSphere/6.5/com.vmware.vsphere.virtualsan.doc/GUID-18F531E9-FF0 ...

  10. pycharm中模块matplolib生成图表出现中文乱码解决方法

    在python文件中加入如下两行 import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中 ...