• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
mengxm
博客园    首页    新随笔    联系   管理    订阅  订阅

poj3660

额,应该是一道水题,只要搞清楚想要知道一只牛在什么等级就要和所有的牛都比较过也就是可以从这只牛到所有牛,那么就问题就转化为传递闭包。

View Code
 1 #include <stdio.h>
2 #include <string.h>
3 #define MAXN 101
4 bool map[MAXN][MAXN];
5 int n,m;
6 void floyd()
7 {
8 for(int k=1;k<=n;++k)
9 for(int i=1;i<=n;++i)
10 for(int j=1;j<=n;++j)
11 map[i][j]=(map[i][j]||(map[i][k]&&map[k][j]));
12 }
13 int main()
14 {
15 while(scanf("%d %d",&n,&m)==2)
16 {
17 memset(map,false,sizeof(map));
18 for(int i=1;i<=n;++i)
19 map[i][i]=true;
20 for(int i=1,a,b;i<=m;++i)
21 {
22 scanf("%d %d",&a,&b);
23 map[a][b]=true;
24 }
25 floyd();
26 int cnt=0;
27 bool f;
28 for(int i=1;i<=n;++i)
29 {
30 f=true;
31 for(int j=1;j<=n;++j)
32 if(!(map[i][j]||map[j][i]))
33 {
34 f=false;
35 break;
36 }
37 if(f)
38 ++cnt;
39 }
40 printf("%d\n",cnt);
41 }
42 return 0;
43 }



posted @ 2012-02-14 23:52  mengxm  阅读(228)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3