受牛仰慕的牛(popular cows)
  每头牛都有一个梦想:成为一个群体中最受欢迎的名牛!在一个有N(1<=N<=10,000)头牛的牛群中,给你M(1<=M<=50,000)个二元组(A,B),表示A认为B是受欢迎的。既然受欢迎是可传递的,那么如果A认为B受欢迎,B又认为C受欢迎,则A也会认为C是受欢迎的,哪怕这不是十分明确的规定。你的任务是计算被所有其它的牛都喜欢的牛的个数。

这道题直接考虑模拟是不行的,要考虑抽象模型。将仰慕关系建立成一个有向图,然后计算出强连通分量,缩点之后计算每个点的出度,如果有且只有一个点的出度为0,那么这头牛存在,否则不存在。
  要注意的是,缩点之后输出答案的时候,输出的是这个点(强连通分量)所包含的点数。

这道题是老师拿给我练习强连通的练手题。在强连通的算法上可以看出我对细节的把握还是不纯熟。比如忘记赋值DFN和LOW数组,还有就是对题目的抽象模型的能力分析不熟,如果不是老师告诉我这是强连通的话我估计是没有办法知道这道题的正确解法的。
  下附代码,同样不知道那时候的我在干什么。

  1 #include <algorithm>
  2 #include <iostream>
  3 #include <fstream>
  4 #include <cstring>
  5 #include <cstdlib>
  6 #include <cmath>
  7 using namespace std;
  8 ifstream fin("popular.in");
  9 ofstream fout("popular.out");
 10 struct ls
 11 {
 12  int nw;
 13  int nxt;
 14 };
 15 ls qxx[50001];//链式前向星
 16 int cows=0,gx=0,bian=0,qlt=0,cs=0;
 17 int qlts[10001]={0};//每个强连通分量包含的点数
 18 int DFN[10001]={0},LOW[10001]={0},tou[10001]={0};
 19 int outs[10001]={0};//每个强连通分量的出度
 20 int from[10001]={0};//每个点所属的强连通分量
 21 bool rz[10001]={0};//每个点是否入栈
 22 bool pd[10001][10001]={0};//两个强连通分量之间是否相通
 23 int zhan[10001]={0},top=0;
 24 void add(int fr,int to);
 25 void add2(int fr,int to);
 26 void tarjan(int nw);
 27 int main(void)
 28 {
 29  fin>>cows>>gx;
 30  int a=0,b=0;
 31  memset(tou,-1,sizeof(tou));
 32  for(int i=1;i<=gx;i++)
 33     {
 34      fin>>a>>b;
 35      add(a,b);
 36     }
 37  for(int i=1;i<=cows;i++)
 38     {
 39      if(!DFN[i])tarjan(i);
 40     }
 41  int v=0;
 42  for(int i=1;i<=cows;i++)
 43     {
 44         for(int j=tou[i];j>0;j=qxx[j].nxt)
 45         {
 46          v=qxx[j].nw;
 47          if(from[i]!=from[v]&&!pd[from[i]][from[v]])add2(from[i],from[v]);
 48         }
 49     }
 50  int total=0,ans=0;
 51  for(int i=1;i<=qlt;i++)
 52     {
 53      if(outs[i]==0)
 54        {
 55         total++;
 56         ans+=qlts[i];
 57        }
 58     }
 59  if(total==1)fout<<ans;
 60  else fout<<"0";
 61  return 0;
 62 }
 63
 64 void add(int fr,int to)
 65 {
 66  bian++;
 67  qxx[bian].nw=to;
 68  qxx[bian].nxt=tou[fr];
 69  tou[fr]=bian;
 70 }
 71
 72 void tarjan(int nw)
 73 {
 74  top++;
 75  DFN[nw]=LOW[nw]=++cs;
 76  zhan[top]=nw;
 77  rz[nw]=true;
 78  int v=0;
 79  for(int i=tou[nw];i>0;i=qxx[i].nxt)
 80     {
 81      v=qxx[i].nw;
 82      if(!DFN[v])
 83        {
 84         tarjan(v);
 85         LOW[nw]=min(LOW[v],LOW[nw]);
 86        }
 87      else
 88        {
 89         if(rz[v]==true)
 90           {
 91            LOW[nw]=min(LOW[nw],DFN[v]);
 92           }
 93        }
 94     }
 95  if(DFN[nw]==LOW[nw])
 96    {
 97     qlt++;
 98     do
 99     {
100      v=zhan[top];
101      from[v]=qlt;
102      qlts[qlt]++;
103      rz[v]=false;
104      top--;
105     }while(nw!=v);
106    }
107  return;
108 }
109
110 void add2(int fr,int to)
111 {
112  pd[fr][to]=true;
113  outs[fr]++;
114  return;
115 }

转载于:https://www.cnblogs.com/CYWer/p/4805032.html

【POJ2186】受牛仰慕的牛相关推荐

  1. poj2186强联通(牛仰慕)

    题意:       有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕 的有多少? 思路:       想想,是不是一个环中的老牛的关系都是一 ...

  2. E-牛牛小数点_牛客练习赛89(数学)

    E-牛牛小数点_牛客练习赛89 (nowcoder.com) 题目描述 牛牛想和点点交朋友, 于是点点给了牛牛一个问题. 定义关于小数 xxx 的函数 f(x)f(x)f(x), 表示 xxx 中两个 ...

  3. 一个java面试题:一个农夫养了一头牛,三年后,这头牛每年会生出一头牛,生出来的牛三年后又可以每年生出一头牛,不考虑牛的性别和生死,问农夫10年后有多少头牛?

    package com.hcmony.test; /** * Created by hcmony on 2017/9/7. */ public class CowTest {/** * 问题:一个农夫 ...

  4. 重庆php牛人,惊掉下巴!铅笔芯刻“牛”?这些牛人够牛气

    近日 外卖小哥将废旧易拉罐变艺术品 小伙在铅笔芯上刻出一头"牛" -- 一些民间"牛人"各显神通 让网友直呼"高手" 来看! 废旧易拉罐变艺 ...

  5. 牛磨王!牛磨王抗磨网的2019猪年贺岁词 | “绿多多”绿色资产资讯

    牛磨王抗磨派发起人Aron的新春贺词:今年,我们说的最多的一句就是牛磨王崛起! 牛磨王抗磨派.牛磨王抗磨网的努力新生.本身,我们就是新兴事物,而且,我们这一派系,旗帜鲜明的与旧生态不同,就是燃!对于某 ...

  6. 牛听听显示服务器正在升级,升级了牛听听读书牛3.0版本,陪着孩子玩的停不下来...

    大家好我是奶爸大星,上面这个图是去年底我给大家晒单的<读绘本,学英语,早教启蒙家教老师多合一牛听听读书牛礼盒版晒单>里面我儿子用牛听听读绘本时候的照片.那个时候我儿子一岁多,而现在这个坏小 ...

  7. Java代码农夫与牛,农夫和牛的故事!(销售必看)

    原标题:农夫和牛的故事!(销售必看) 导读:有一位农夫,他想和儿子一起把牛牵进牛棚.但是牛却较起劲来,死活不肯进棚.父子两人你拉我推,但牛却丝毫不动.这时,农夫的妻子从河边拔了一捧青草,一边喂牛一边向 ...

  8. 从“草原牛”到“数字牛”:蒙牛的数字化转型之道

    导语 | 产业互联网时代,不断升级的技术正在改变着更多的传统行业.众多零售和品牌制造的企业依托多样的前沿科技,在数字化转型方面展开了深刻的探索.此次,我们邀请到了蒙牛集团CIO.腾讯云 TVP 行业大 ...

  9. 牛客网 牛客练习赛13 A.幸运数字Ⅰ

    A.幸运数字Ⅰ 链接:https://www.nowcoder.com/acm/contest/70/A 来源:牛客网 水题. 代码: 1 #include<iostream> 2 #in ...

最新文章

  1. 让SEQUENCE记录不变的信息【RECORD STATIC NUMBER IN SEQUENCE】
  2. 【Visual Studio 2019】上传代码到 GitHub ( 16.9.2 版本 | 安装 GitHub 扩展插件 | 创建 Git 仓库 | 推送到远程仓库 )
  3. github mysql 数据恢复_记一次MySQL删库的数据恢复
  4. Cortex - M3 位带别名首地址的计算方法
  5. 上顿号符号_标点符号常见错误,读后涨知识了
  6. mysql主键用完了怎么办_MySQL 自增 ID 用完了怎么办?
  7. Android Killer
  8. echart纵坐标标签特别长换行显示
  9. Dynamics 365 Customer Engagement中插件的调试
  10. python怎么设置图片_python 调整图片亮度的示例
  11. Linux stat
  12. Linux磁盘分区及文件系统格式化和挂载
  13. 算法速学速用大辞典 pdf_随机梯度蒙特卡洛算法-重要性采样
  14. Python常用模块 之 base64模块
  15. 电脑搜索不到打印机应该怎么办?
  16. 操作系统的三个抽象概念
  17. 英语对话关于计算机,有关电脑的一些英语对话
  18. 分享一个好用的53度飞天茅台抢购脚本
  19. ecshop与shopex哪个更好?
  20. Redis Cluster集群实验

热门文章

  1. 观察者模式与.Net Framework中的委托与事件
  2. 使用jQuery实现实时模糊查询功能
  3. 微信小程序 摄像头 录音授权
  4. 怎么恢复U盘删除的内容,U盘的内容被删除了怎么办
  5. win10挂载linux iscsi存储,我的NAS使用经验 篇六:挂载iSCSI服务为物理磁盘给电脑扩容,支持Windows和MAC...
  6. 【软件测试学习】禅道工具使用
  7. Python+Django+Mysql个性化二手车推荐系统 汽车推荐系统 基于用户、项目、内容的协同过滤推荐算法 WebCarCFRSPython python实现协同过滤推荐算法实现源代码下载
  8. 大学计算机专业论文提纲范文,计算机专业论文提纲范文
  9. ECN Trade:美国证券遭受冷落,债券外汇火热
  10. AESIM与MATLAB联合仿真环境搭建