题目链接:https://cn.vjudge.net/problem/POJ-3660

题意

有n头牛,每头牛都有一定的能力值,能力值高的牛一定可以打败能力值低的牛

现给出几头牛的能力值相对高低

问在一场一对一的比赛中,那些牛的排名可以确定下来

思路

一开始还以为是topo排序,每次去掉没有入度或出度的节点

若有两个及以上的节点可以去掉,则排序结束

然后写出来WA两发...

正确思路:

若满足x头牛可以打败牛a,牛a可以打败y头牛,且nx+y-1时牛a排名唯一确定

那么可以利用Floyd传递闭包来生成一个数组G[a][b],表示a可以打败b

当$ \sum G[i][a]+G[a][i]n-1$时,可以确定牛a排名

代码

#include <cstring>
#include <cstdio>
const int maxn=100;
bool G[maxn+5][maxn+5]={false}; void Floyd(int n){
for (int k=1; k<=n; k++)
for (int i=1; i<=n; i++)
for (int j=1; j<=n; j++)
G[i][j]=G[i][j] || (G[i][k] && G[k][j]);
} int main(void){
int n, m, a, b; memset(G, false, sizeof(G));
scanf("%d%d", &n, &m);
for (int i=0; i<m; i++){
scanf("%d%d", &a, &b);
G[a][b]=true;
}Floyd(n); int ans=0;
for (int i=1; i<=n; i++){
int cnt=0;
for (int j=0; j<=n; j++) if (i!=j && (G[i][j] || G[j][i]))
cnt++;
if (cnt==n-1) ans++;
}printf("%d\n", ans); return 0;
}
Time Memory Length Lang Submitted
32ms 364kB 685 G++ 2018-05-25 15:05:57

最新文章

  1. GIT本地配置和PUSH
  2. ES5 Objece.creat实现继承
  3. Convert.ToInt16 与 Convert.ToInt32 区别
  4. [zz]论程序员
  5. uva 1335 - Beijing Guards
  6. 优化之sitemap+RSS
  7. 微信 python 接口 -- itchat 文档
  8. Redis分布式队列和缓存更新
  9. Git常用命令使用大全
  10. Python代码缩进与测试模块
  11. 【调试基础】Part 5 PE格式
  12. php中测试运行的时间,从而选择得出优化程序
  13. Linux常用命令之网络和关机重启命令
  14. CUDA编程之快速入门
  15. EXCEL中把两列表格里的数字合成一列并且中间用逗号隔开
  16. vue常用UI组件
  17. 单字段去重 distinct 返回其他多个字段
  18. Java - 26 Java 数据结构
  19. PHP 调试工具Xdebug安装配置
  20. Android MD5算法

热门文章

  1. Python介绍与学习
  2. hive(I)--学习总结之常用技能
  3. Is jQuery Still Relevant in 2018?
  4. vue2.0变化(转载)
  5. docker images镜像无法删除
  6. NOI 2018 屠龙勇士 (拓展中国剩余定理excrt+拓展欧几里得exgcd)
  7. 使用tf.ConfigProto()配置Session运行参数和GPU设备指定
  8. 新手学python-Day4-进制,数据类型,编码转换,列表
  9. 小学生绞尽脑汁也学不会的python(初识面对对象)
  10. Git:与eclipse搭配使用