在zyh的高中,学生会每一年都会评选受欢迎学生,所谓受欢迎的学生,就是被所有学生喜欢的学生。 每个学生都喜欢自己,碰巧的是,如果学生A 喜欢学生B ,学生B喜欢学生C, 那么学生A也喜欢学生C。 但是学生A喜欢学生B 并不意味着学生B喜欢学生A。 zyh参与了评选工作,苦逼的他被安排去购买奖品,于是他拿到了一张表,这张表有m条记录,每条记录由两个数字a,b组成,表示a,喜欢b ,但是由于学生太多了,他无法知道会有多少个受欢迎的学生,从而无法去购买奖品,你能帮他解决吗?

Input

第1行:两个以空格分隔的整数,N和M. 第2行到第N+M行:两个以空格分隔的数字A和B,意味着A喜欢B。 1<=N<10,000 , 1 <= M <= 50,000.

Output

输出一个数-zyh所需购买的奖品数。

Sample Input

3 3
1 2
2 1
2 3

Sample Output

1

代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
#define N 10010
using namespace std;
int V;
vector<int>G[N];
vector<int>rG[N];
vector<int>vs;
bool used[N];
int cmp[N];
void add_edge(int from,int to){G[from].push_back(to);rG[to].push_back(from);
}
void dfs(int v){used[v]=true;for(int i=0;i<G[v].size();i++){if(!used[G[v][i]])dfs(G[v][i]);}vs.push_back(v);
}
void rdfs(int v,int k){used[v]=true;cmp[v]=k;for(int i=0;i<rG[v].size();i++){if(!used[rG[v][i]])rdfs(rG[v][i],k);}
}
int scc(){memset(used,0,sizeof(used));vs.clear();for(int v=0;v<V;v++){if(!used[v])dfs(v);}memset(used,0,sizeof(used));int k=0;for(int i=vs.size()-1;i>=0;i--){if(!used[vs[i]])rdfs(vs[i],k++);}return k;
}
int main(){int m,a,b;while(scanf("%d %d",&V,&m)!=EOF){for(int i=0;i<V;i++){G[i].clear();rG[i].clear();}for(int i=0;i<m;i++){scanf("%d %d",&a,&b);a--;b--;add_edge(a,b);}int n=scc();int u=0,num=0;for(int v=0;v<V;v++){if(cmp[v]==n-1){u=v;num++;}}memset(used,0,sizeof(used));rdfs(u,0);for(int v=0;v<V;v++){if(!used[v]){num=0;break;}}printf("%d\n",num);}return 0;
}

POJ 2168 Popular Cows相关推荐

  1. Poj 2186 Popular Cows(Tarjan 强连通缩点)

    传送门:Poj 2186 题意:给你n头牛,m种关系,A牛认为B牛是popular的,B牛认为C牛是popular的,则A也认为C是popular的,问最终有几头被所有牛认为是popular的牛 题解 ...

  2. POJ 2186 Popular Cows(Tarjan)

    http://poj.org/problem?id=2186 题意 :给你n头牛,m对关系,每对关系由两个编号组成,u和v代表着u认为v是受欢迎的,如果1认为2是受欢迎的,2认为3是受欢迎的,那1认为 ...

  3. POJ 2186 Popular Cows (强联通分量)

    链接 :http://poj.org/problem?id=2186 一个联通分量里的所有的牛满足任何一个被其他牛认为是红人.强联通缩点之后 只需要找到一个且只有一个联通分量且它的出度为0 答案就是这 ...

  4. POJ 2186 Popular Cows

    POJ_2186 这个题目其实就是求完强连通分量之后,判断一下出度为0的强连通分量是否唯一,如果唯一输出该强连通分量的点数,否则输出0. 由于之前求强连通分量的时候是把同一个强连通分量里的数放到一个数 ...

  5. POJ - 2186 Popular Cows(强连通缩点)

    题目链接:点击查看 题目大意:给出n只奶牛,以及m组可传递的关系,每组关系给出一个a和一个b,表示为a->b,意思是奶牛a觉得奶牛b很酷,因为关系可传递,所以如果a->b且b->c, ...

  6. POJ 2186 Popular Cows(强连通分量缩点,Tarjan算法)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16578 [解题报告] 给你一个有向图,问你有多少个点可以被其它 ...

  7. 二分搜索 POJ 2456 Aggressive cows

    题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #incl ...

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

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

  9. Popular Cows POJ - 2186(tarjan算法)+详解

    题意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有 N头牛,给你M对整数(A,B),表示牛 A认为牛B受欢迎.这种关系是具有传递性的,如果 A认为 B受欢迎, B认为 C受欢迎,那么牛 A也认为牛 ...

最新文章

  1. 注册页面所涉及的知识
  2. LightBus新浪微博客户端开源下载
  3. cad线性标注命令_CAD图纸中怎么进行线性标注
  4. 与股权投资有关的抵消分录的编制
  5. Linux系统学习----前言
  6. 永劫无间为啥显示连接服务器失败,永劫无间服务器故障怎么办?永劫无间服务器故障解决办法...
  7. Linux系统入门学习:在Debian或Ubuntu上安装完整的内核源码
  8. 心电图计算心率公式_心电图到底能反应啥问题,看过之后你也能当“医生”
  9. 您准备好观看GraphQL了吗?
  10. day3----python变量与常量
  11. stm32f7网口_STM32F7串口通信问题
  12. s5pv210 linux内核移植,S5PV210(TQ210)学习笔记——内核移植与文件系统构建之二
  13. 如何对物联网数据进行大数据分析
  14. AlexNet详解2
  15. vue个人学习(三)----组件
  16. VS+QT快速入门教程
  17. Spring Boot设置指定包的日志级别
  18. 通俗的解释机器学习的预测原理
  19. 《JavaEE黑马》 第一阶段 JavaSE基础 第一章
  20. 数字化到底有什么用?

热门文章

  1. 双榜加冕!加速科技荣登2023准独角兽中国未来独角兽双榜单
  2. php 开启常驻进程,swoole如何常驻进程
  3. 将两个字符串合并成一个字符串(存在范围可自行调整)
  4. 物联网的发展前景怎么样,发展趋势是什么?
  5. 常见的算法思想(整理)
  6. 昆仑万维300418
  7. 忽然出现的wsappx占用了几乎所有内存,这是我的两个半小时解决历程
  8. 可编辑的日历控件_选择正确的WordPress编辑日历插件
  9. PYTHON 作业连绵细雨
  10. React--简单的抽卡模拟器