博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ1051][HAOI2006]受欢迎的牛
阅读量:4968 次
发布时间:2019-06-12

本文共 2471 字,大约阅读时间需要 8 分钟。

1051: [HAOI2006]受欢迎的牛

Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 5981  Solved: 3147 [][][]

Description

  每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头牛被所有的牛认为是受欢迎的。

Input

      第一行两个数N,M。 接下来M行,每行两个数A,B,意思是A认为B是受欢迎的(给出的信息有可能重复,即有可能出现多个A,B)

Output

      一个数,即有多少头牛被所有的牛认为是受欢迎的。

Sample Input

3 3
1 2
2 1
2 3

Sample Output

1

HINT

100%的数据N<=10000,M<=50000
 
直接缩点,如果出度为0的点只有一个,输出这个点的大小即可,否则没有
 
#include 
#include
using namespace std;const int maxn = 10000 + 10, maxm = 50000 + 10;inline int readint(){ int f = 1, n = 0; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while(ch <= '9' && ch >= '0'){ n = (n << 1) + (n << 3) + ch - '0'; ch = getchar(); } return f * n;}struct Edge{ int to, next; Edge(){} Edge(int _t, int _n): to(_t), next(_n){}}e[maxm];int fir[maxn] = {
0}, cnt = 0;inline void add(int u, int v){ e[++cnt] = Edge(v, fir[u]); fir[u] = cnt;}int sta[maxn], top = 0;int dfn[maxn], low[maxn], Index = 0;bool ins[maxn] = {
false};int belong[maxn], siz[maxn] = {
0}, bcnt = 0;int outd[maxn] = {
0}, ans;void dfs(int u){ dfn[u] = low[u] = ++Index; sta[++top] = u; ins[u] = true; for(int v, i = fir[u]; i; i = e[i].next){ v = e[i].to; if(!dfn[v]){ dfs(v); low[u] = min(low[u], low[v]); } else if(ins[v]) low[u] = min(low[u], dfn[v]); } if(low[u] == dfn[u]){ int now; bcnt++; do{ now = sta[top--]; ins[now] = false; belong[now] = bcnt; siz[bcnt]++; } while(now != u); }}int main(){ int n, m; n = readint(); m = readint(); for(int u, v, i = 1; i <= m; i++){ u = readint(); v = readint(); add(u, v); } for(int i = 1; i <= n; i++) if(!dfn[i]) dfs(i); for(int v, u = 1; u <= n; u++) for(int i = fir[u]; i; i = e[i].next){ v = e[i].to; if(belong[u] == belong[v]) continue; outd[belong[u]]++; } bool flag = false; for(int i = 1; i <= bcnt; i++){ if(!outd[i]){ if(flag){ puts("0"); return 0; } ans = siz[i]; flag = true; } } printf("%d\n", ans); return 0;}

 

 

转载于:https://www.cnblogs.com/ruoruoruo/p/7436447.html

你可能感兴趣的文章
简易爬虫(爬取本地数据)
查看>>
Javascript 有用参考函数
查看>>
点群的判别(三)
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>
webdriver api
查看>>
apache 实现图标缓存客户端
查看>>
揭秘:黑客必备的Kali Linux是什么,有哪些弊端?
查看>>
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
P3565 [POI2014]HOT-Hotels
查看>>