每头牛的梦想就是成为牛群中最受欢迎的牛。 在一群N(1 <= N <= 10,000)母牛中,

你可以得到M(1 <= M <= 50,000)有序的形式对(A,B),告诉你母牛A认为母牛 B很受欢迎。

由于流行是传递性的,如果A认为B很受欢迎,B认为C受欢迎,那么A也会认为C是
流行的,即使这不是输入中有序对明确规定的。

你的任务是计算每头奶牛认为受欢迎的奶牛数量。

水题 强连通入门题目。

tarjin缩点  然后就变成一棵树,

然后就是求有多少个点的出度为0

输入这个点里面包含的所有点,因为有缩点出来的

所有输出他的强连通分量

缩点后如果有多个出度为0的点,这样是不符合题意的,输出0

不联通 也是输出0

 #include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
using namespace std; const int maxn = 1e5 + ;
int n, m, u, v, tot, top, cnt, flag;
struct node {
int v, next;
} edge[maxn];
int head[maxn], instack[maxn], s[maxn];
int dfn[maxn], low[maxn], belong[maxn];
void init() {
tot = cnt = top = flag = ;
memset(head, -, sizeof(head));
memset(dfn, , sizeof(dfn));
memset(instack, , sizeof(instack));
}
void add(int u, int v) {
edge[tot].v = v;
edge[tot].next = head[u];
head[u] = tot++;
}
void tarjin(int v) {
dfn[v] = low[v] = ++flag;
instack[v] = ;
s[top++] = v;
for (int i = head[v] ; i != - ; i = edge[i].next) {
int j = edge[i].v;
if (!dfn[j]) {
tarjin(j);
low[v] = min(low[v], low[j]);
} else if (instack[j]) low[v] = min(low[v], dfn[j]);
}
if (dfn[v] == low[v]) {
cnt++;
int t;
do {
t = s[--top];
instack[t] = ;
belong[t] = cnt;
} while(t != v) ;
}
}
int du[maxn];
void solve() {
for (int i = ; i <= n ; i++)
if (!dfn[i]) tarjin(i);
}
int main() {
while(scanf("%d%d", &n, &m) != EOF) {
if (n == && m == ) break;
init();
memset(du, , sizeof(du));
for (int i = ; i < m ; i++) {
scanf("%d%d", &u, &v);
add(u, v);
}
for (int i = ; i <= n ; i++)
if (!dfn[i]) tarjin(i);
for (int i = ; i <= n ; i++) {
for (int j = head[i] ; ~j; j = edge[j].next ) {
if (belong[edge[j].v] != belong[i]) du[belong[i]]++;
}
}
int ansrt, zero = ;
for (int i = ; i <= cnt ; i++) {
if (!du[i]) {
ansrt = i;
zero++;
}
}
if (zero == ) {
int ans = ;
for (int i = ; i <= n ; i++) {
if (belong[i] == ansrt) ans++;
}
printf("%d\n", ans);
} else printf("0\n");
}
return ;
}

最新文章

  1. 关于MySql 关键字与字段名冲突 的问题
  2. 智能家居常用WiFi模块
  3. springMVC,mybatis配置事务
  4. OGRFeature的DestroyFeature方法
  5. crontab无法调用java的问题解决
  6. Javascript之获取屏幕宽高
  7. RPC(Remote Procedure Call Protocol)
  8. 浩哥解析MyBatis源码(四)——DataSource数据源模块
  9. Nature:新发现挑战神经元作用传统理论 [转自科学网]
  10. HTML的语法
  11. JS中的toString方法
  12. 查找单链表中倒数第K个位置上的结点,若查找成功返回该节点的data域,若不成功只返回0
  13. 背景图片自适应整个页面CSS+DIV
  14. 【LeetCode】234. Palindrome Linked List (2 solutions)
  15. 如何在Java 环境下使用 HTTP 协议收发 MQ 消息
  16. 使用Axure RP设计Android界面原型
  17. MongoServerSettings Members
  18. 洛谷 P3204 [HNOI2010]公交线路
  19. HDU 3669 Cross the Wall(斜率DP+预处理)
  20. Oh my God, 连jQuery都放弃IE了!

热门文章

  1. input标签中的name
  2. hadoop的shuffle过程
  3. jupyter notebook中出现ValueError: signal only works in main thread 报错 即 长时间in[*] 解决办法
  4. python-11多线程
  5. dfs序线段树
  6. Android 文件管理器通用类 FileUtil
  7. Android webview 加载https网页显示空白
  8. 修改window 10 开始菜单问题
  9. 剑指Offer - 九度1389 - 变态跳台阶
  10. windows 10的资源管理器不显示映射的网络驱动器怎么办?