P2341 [HAOI2006]受欢迎的牛

题目描述

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

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

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

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

输入输出格式

输入格式:

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

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

输出格式:

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

输入输出样例

输入样例#1:

3 3
1 2
2 1
2 3
输出样例#1:

1

说明

只有 3 号奶牛可以做明星

【数据范围】

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

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

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

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

模板题,出度为零的点有且仅有一个才有解,解即为该点内的点数。

 #include <bits/stdc++.h>
const int INF = 0x3f3f3f3f;
const int MAXN = + ;
const int MAXM = + ;
inline int read(int &x){
x = ;char ch = getchar();char c = ch;
while(ch > '' || ch < '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '',ch = getchar();
if(c == '-') x = -x;
}
inline int min(int a,int b){return a > b? b : a;}
int n,m,tmp1,tmp2,cnt,cnt2,head[MAXN],head2[MAXN];
int dfn[MAXN],low[MAXN], group, num[MAXN],belong[MAXN], t, stack[MAXN], top;
bool b[MAXN],bb[MAXN];
struct Edge{int u,v,next;}edge[MAXM],edge2[MAXM];
void insert(int a,int b){edge[++cnt] = Edge{a, b, head[a]};head[a] = cnt;}
void insert2(int a,int b){edge2[++cnt2] = Edge{a, b, head2[a]};head2[a] = cnt2;}
void dfs(int u){
int now = -;
b[u] = true;bb[u] = true;
dfn[u] = low[u] = ++t;
stack[++top] = u;
for(int pos = head[u];pos;pos = edge[pos].next){
int v = edge[pos].v;
if(!b[v]){
dfs(v);
if(low[u] > low[v])low[u] = low[v];
}
else if(bb[v] && low[u] > dfn[v]){
low[u] = dfn[v];
}
}
if(low[u] == dfn[u]){
group ++;
while(now != u){
now = stack[top --];
bb[now] = false;
belong[now] = group;
num[group] ++;
}
}
}
inline void rebuild(){
for(int u = ;u <= n;u ++){
for(int pos = head[u];pos;pos = edge[pos].next){
int v = edge[pos].v;
if(belong[u] != belong[v]){
insert2(belong[u], belong[v]);
}
}
}
}
inline void tarjan(){
for(int i = ;i <= n;i ++)if(!b[i])dfs(i);
rebuild();
}
int ans;
int main(){
read(n);read(m);
for(int i = ;i <= m;i ++){
read(tmp1);read(tmp2);insert(tmp1, tmp2);
}
tarjan();
for(int i = ;i <= group;i ++){
if(!head2[i]){
if(ans) ans = ;break;
else ans = num[i];
}
}
printf("%d", ans);
return ;
}

【模板】Tarjan缩点,强连通分量 洛谷P2341 [HAOI2006]受欢迎的牛 [2017年6月计划 强连通分量01]的更多相关文章

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

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

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

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

  3. 洛谷 P2341 [HAOI2006]受欢迎的牛 解题报告

    P2341 [HAOI2006]受欢迎的牛 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢&q ...

  4. 【题解】洛谷P2341 [HAOI2006]受欢迎的牛(强连通分量)

    洛谷P2341:https://www.luogu.org/problemnew/show/P2341 前言 这题看错题目 足足花了将近5小时提交了15次 在一位dalao的提醒下才AC了 记得要看清 ...

  5. 洛谷 P2341 [HAOI2006]受欢迎的牛 题解

    今天学了强连通分量的Tarjan算法,做了这道类似于板子题的题(尽管我调了1.5h).主要的思路是用Tarjan缩点之后,求每个点的入度(实际上是出度,因为我是反着连边的).如果 有且只有一个点的入度 ...

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

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

  7. POJ——T2186 Popular Cows || 洛谷——P2341 [HAOI2006]受欢迎的牛

    http://poj.org/problem?id=2186 || https://www.luogu.org/problem/show?pid=2341 Time Limit: 2000MS   M ...

  8. 洛谷 P2341 [HAOI2006]受欢迎的牛|【模板】强连通分量

    题目传送门 解题思路: 先求强联通分量,缩点,然后统计新图中有几个点出度为0,如果大于1个,则说明这不是一个连通图,答案即为0.否则入度为0的那个强连通分量的点数即为答案 AC代码: #include ...

  9. 洛谷P2341 [HAOI2006]受欢迎的牛|【模板】强连通分量

    https://www.luogu.org/problem/P2341 缩点之后唯一 一个出度为0的点 #include<cstdio> #include<iostream> ...

随机推荐

  1. VUE下echarts宽度响应式

    window.addEventListener("resize", () => { myChart2.resize();});

  2. js 验证图片

    var selectedImg = e.target.files[0]; //获取图片 var isPic = /^(image\/bmp|image\/gif|image\/jpeg|image\/ ...

  3. Java-JPA:JPA

    ylbtech-Java-JPA:JPA JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对 ...

  4. CSS 的overflow:hidden (清除浮动)

    verflow:hidden这个CSS样式是大家常用到的CSS样式,但是大多数人对这个样式的理解仅仅局限于隐藏溢出,而对于清除浮动这个含义不是很 了解.一提到清除浮动,我们就会想到另外一个CSS样式: ...

  5. myeclipse中tomcat内存大小的设置

    刚刚安装了myeclipse9.0,又配置了tomcat7.0,想用ssh框架搭个项目试试tomcat7.0,没想到刚启动项目就会报错,在tomcat6.0中就不会有问题,上网查了那些都不起作用,后来 ...

  6. js格式化数字为金额

    /** * * @param num * @param precision * @param separator * @returns {*} *=========================== ...

  7. string主要操作函数

    参考博客:http://blog.csdn.net/zhenyusoso/article/details/7286456 std::string illegal(" \t\f\v\n\r\\ ...

  8. SQL Server代码如何快速格式化,sqlserver代码

    在SQL Server中我们经常需要编写各种SQL脚本,例如存储过程和函数等,由于在编写过程中,经常会进行调整,有些关键字我们用的大写,有的我们用的小写,有的后面结束用:分割有的又没有.对于有强迫症的 ...

  9. jeecmsv9-adminVue 打包出错

    F:\jeecms\jeecmsv9-adminVue>node build\build.js - building for production...Error processing file ...

  10. 1.开始Springboot 基本配置和helloworld

    1 pom.xml 首先引入两个xml节点 <!--这里面继承了springboot很多相关依赖--> <parent> <groupId>org.springfr ...