P2341 [HAOI2006]受欢迎的牛

题目描述

每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶

牛都是自恋狂,每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果A喜

欢B,B喜欢C,那么A也喜欢C。牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你

算出有多少头奶牛可以当明星。

输入输出格式

输入格式:

 第一行:两个用空格分开的整数:N和M

 第二行到第M + 1行:每行两个用空格分开的整数:A和B,表示A喜欢B

输出格式:

 第一行:单独一个整数,表示明星奶牛的数量

说明

【数据范围】

10%的数据N<=20, M<=50

30%的数据N<=1000,M<=20000

70%的数据N<=5000,M<=50000

100%的数据N<=10000,M<=50000


考虑到可能存在的环(简单环和非简单环),我们先用tarjan缩点。

对于一个连通图,若某点的出度为0,则图中所有点都可以遍历到它

做完了...


code:

#include <cstdio>
#include <queue>
using namespace std;
const int N=10010;
const int M=50010;
struct Edge
{int to,next;
}edge[M],edge1[M];
int head[N],cnt=0,head1[N],cnt1=0,n1=0;
void add(int u,int v)
{edge[++cnt].next=head[u];edge[cnt].to=v;head[u]=cnt;
}
void add1(int u,int v)
{edge1[++cnt1].next=head1[u];edge1[cnt1].to=v;head1[u]=cnt1;
}
int out[N],n,m,dp[N],siz[N],ha[N],low[N],dfn[N],is[N],time=0,s[N],tot=0;
void push(int x){s[++tot]=x;}
void pop(){tot--;}
queue <int > q;
void tarjan(int now)
{low[now]=dfn[now]=++time;is[now]=1;push(now);for(int i=head[now];i;i=edge[i].next){int v=edge[i].to;if(!dfn[v]){tarjan(v);low[now]=min(low[v],low[now]);}else if(is[v])low[now]=min(low[now],dfn[v]);}if(low[now]==dfn[now]){int k;n1++;do{k=s[tot];ha[k]=n1;siz[n1]++;is[k]=0;pop();}while(k!=now);}
}
int main()
{scanf("%d%d",&n,&m);int u,v;for(int i=1;i<=m;i++){scanf("%d%d",&u,&v);add(u,v);}for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)for(int j=head[i];j;j=edge[j].next){int v0=edge[j].to;if(ha[v0]!=ha[i]){add1(ha[i],ha[v0]);out[ha[i]]++;}}int cntt=0,loc;for(int i=1;i<=n1;i++){if(!out[i]) loc=i,cntt++;if(cntt==2) break;}    if(cntt==2) printf("0\n");else printf("%d\n",siz[loc]);return 0;
}

2018.6.9

转载于:https://www.cnblogs.com/butterflydew/p/9161722.html

洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告相关推荐

  1. 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows

    P2341 [HAOI2006]受欢迎的牛/POJ2186:Popular Cows 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所 ...

  2. 洛谷P2341 [HAOI2006]受欢迎的牛 (Tarjan,SCC缩点)

    P2341 [HAOI2006]受欢迎的牛|[模板]强连通分量 https://www.luogu.org/problem/P2341 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就 ...

  3. 洛谷 P2341 [HAOI2006]受欢迎的牛

    题目 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢" ...

  4. 洛谷P2341(受欢迎的牛)题解

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜 ...

  5. 【luogu P2341 [HAOI2006]受欢迎的牛】 题解

    题解报告:https://www.luogu.org/problemnew/show/P2341 我们把图中的强连通分量缩点,然后只有出度为0的牛是受欢迎的,这样如果出度为0的牛只有一个,说明受所有牛 ...

  6. P2341 [HAOI2006]受欢迎的牛 强连通

    题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可 ...

  7. P2341 [HAOI2006]受欢迎的牛 (tarjan缩点+出度)

    题意: 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜欢B,B喜欢C, ...

  8. Luogu P2341 [HAOI2006]受欢迎的牛

    这道题应该也是经典的SCC题了吧 印象中不知道在在班里上课的时候在紫书,ACM竞赛的那些书上看到多少次(有点奇怪) 首先思路很明显,就是要找出有多少个点,以它们为起点可以遍历整个图 首先考虑一种情况, ...

  9. 洛谷 P2893 [USACO08FEB]修路Making the Grade 解题报告

    P2893 [USACO08FEB]修路Making the Grade 题目描述 A straight dirt road connects two fields on FJ's farm, but ...

  10. 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告

    P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...

最新文章

  1. 用Python偷偷告诉你十一假期8亿人都去哪儿浪?
  2. html中全选按钮代码怎么写,html中的javascript 全选/取消全选操作示例代码
  3. win7安装mysql-5.7.18
  4. 关于Python中的self
  5. 国内HuggingFace,预训练模型镜像使用
  6. Linux中printk和strace命令调试的一些技巧
  7. iPhone 12不支持双卡5G?媒体实测结论终于让大家安心
  8. 国外程序员访谈:学无止境
  9. java实现 tf-idf
  10. python模块——pytz
  11. 箭头小三角(向上或向下、两条边)--两种制作方法
  12. 浪潮华为,高端存储市场的双头之争
  13. 使用Graphics在鼠标点击画圆圈扩散效果
  14. 组织人事领域信息化探索:开启编制、干部、人事一体化管理新模式
  15. flutter AppBar背景渐变色
  16. Hermez官方文档翻译(四)开发者-SDK (有自己测试验证demo)
  17. 如何全面的理解APS自动排产系统?
  18. Python人工智能基础到实战课程-北方网视频
  19. 【解决方案】“小饭桌”变成“放心桌”,TSINGSEE青犀视频RTMP推流网关+公有云直播远程监控
  20. HDU 1493(QQpet exploratory park)

热门文章

  1. 使用REST风格架构您需要知道的一些事
  2. 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画
  3. 一个比较好的多人网络游戏菜单程序。
  4. HardSoft-Viewer SQL
  5. Linux下安装DB2_v9.7详细教程
  6. 《IT项目管理》读书笔记(1) —— 概述
  7. LNMP状态管理命令
  8. ios客户端快速滚动和回弹效果的实现
  9. 有佳文档管理v2.03
  10. 对于基类和派生类中的多态及重载的最好解释方法