原题来自:USACO 2003 Fall

题目描述

每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂,每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果 AAA 喜欢 BBB,BBB 喜欢 CCC,那么 AAA 也喜欢 CCC。牛栏里共有 NNN 头奶牛,给定一些奶牛之间的爱慕关系,请你算出有多少头奶牛可以当明星。

输入格式

第一行:两个用空格分开的整数:NNN 和 MMM。

接下来 MMM 行:每行两个用空格分开的整数:AAA 和 BBB,表示 AAA 喜欢 BBB。

输出格式

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

输入输出样例

输入 #1
3 3
1 2
2 1
2 3
输出 #1
1

说明/提示

只有 3 号奶牛可以做明星。

数据范围

题解

emmmm

这是一到极为经典的,似乎是这一类题的模板的题目:缩点
缩点,也是tarjan的极大的一个作用。
缩点只对强联通分量有用,因为强联通分量中的点可以互相到达,可以被视为一个点。

这题,是肯定是有环的。
那么肯定是很不好去实现遍历的。
怎么办呢?
根据常识,环上的点肯定都在同一个强联通分量中。
强联通分量 -->缩点
经过缩点的图,一定是一个有向无环图
那么只需要一个dfs就好了啊awa
简单题
awa
淦,题解写完了,代码还没写。。。

等等我写完代码awa

#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct edge
{
int next,to;
}e[1000001];
int head[1000001],n,m,w[1000001],tot,ccs,dfsc,low[1000001],dfn[1000001],color[10000001],cnt[1000001],de[1000001],all[1000001];bool vis[1000001];
stack<int> stk;
inline ll read()
{
char c=getchar();ll a=0,b=1;
for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;
return a*b;
}
void add(int i,int j)
{
e[++tot].next=head[i];
e[tot].to=j;
head[i]=tot;
}
void tarjan(int x,int fa)
{
dfn[x]=low[x]=++dfsc;
vis[x]=true;stk.push(x);
for(int i=head[x];i!=0;i=e[i].next)
{
int u=e[i].to;
// if(u==fa)continue;
if(dfn[u]==0)
{
tarjan(u,x);
low[x]=min(low[x],low[u]);
}
else
if(vis[u]==true)
{
low[x]=min(low[x],dfn[u]);
}
}
if(dfn[x]==low[x])
{
int k;
ccs++;
do
{
k=stk.top();
stk.pop();
color[k]=ccs;
cnt[ccs]++;all[ccs]++;
vis[k]=false;
}
while(x!=k);
}
}
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
n=read();m=read();
for(int i=1;i<=m;i++)
{
int x=read();int y=read();
add(x,y);
}
for(int i=1;i<=n;i++)
{
if(dfn[i]==0)
{
tarjan(i,-1);
}
}
// for(int i=1;i<=n;i++)
// {
// cout<<color[i]<<endl;
// }
for(int i=1;i<=n;i++)
{
int x=i;
for(int j=head[x];j!=0;j=e[j].next)
{
int u=e[j].to;
if(color[u]!=color[x])
{
de[color[i]]++;
}
}
}
int ans=0,sum=0;bool tt=0;
for(int i=1;i<=ccs;i++)
{
if(de[i]==0)
{
ans+=cnt[color[i]];
sum++;
if(tt){puts("0");return 0;}
tt=i;
}
}
cout<<all[tt]<<endl;
return 0;
}

n年前的草稿总算是发布了awa

今天的第二道tarjan:受欢迎的牛的更多相关文章

  1. 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点

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

  2. 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数

    [bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...

  3. 【BZOJ】1051: [HAOI2006]受欢迎的牛(tarjan)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1051 这题还好-1A了..但是前提还是看了题解的 囧.....一开始认为是并查集,oh,不行,,无法 ...

  4. BZOJ 1051 受欢迎的牛(Tarjan缩点)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4573  Solved: 2428 [Submit][S ...

  5. 【tarjan】BZOJ 1051:受欢迎的牛

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 1642[Submit][Sta ...

  6. bzoj 1051: [HAOI2006]受欢迎的牛 tarjan缩点

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2092  Solved: 1096[Submit][Sta ...

  7. BZOJ 1051: [HAOI2006]受欢迎的牛( tarjan )

    tarjan缩点后, 有且仅有一个出度为0的强连通分量即answer, 否则无解 ----------------------------------------------------------- ...

  8. bzoj1051: [HAOI2006]受欢迎的牛(tarjan板子)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 6064  Solved: 3179[Submit][Sta ...

  9. BZOJ1051:受欢迎的牛(并查集 / Tarjan)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 8161  Solved: 4460 Description ...

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

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

随机推荐

  1. 一文了解Go语言的匿名函数

    1. 引言 无论是在Go语言还是其他编程语言中,匿名函数都扮演着重要的角色.在本文中,我们将详细介绍Go语言中匿名函数的概念和使用方法,同时也提供一些考虑因素,从而帮助在匿名函数和命名函数间做出选择. ...

  2. Nacos服务发现与注册源码剖析

    为什么要看源码: 1.提升技术功底:学习源码里的优秀设计思想,比如一些疑难问题的解决思路,还有一些优秀的设计模式,整体提升自己的技术功底2.深度掌握技术框架:源码看多了,对于一个新技术或框架的掌握速度 ...

  3. 如何不加锁地将数据并发写入Apache Hudi?

    最近一位 Hudi 用户询问他们是否可以在不需要任何锁的情况下同时从多个写入端写入单个 Hudi 表. 他们场景是一个不可变的工作负载. 一般来说对于任何多写入端功能,Hudi 建议启用锁定配置. 但 ...

  4. 图像增强—自适应直方图均衡化(AHE)-限制对比度自适应直方图均衡(CLAHE)

    一.自适应直方图均衡化(Adaptive histgram equalization/AHE) 1.简述 自适应直方图均衡化(AHE)用来提升图像的对比度的一种计算机图像处理技术.和普通的直方图均衡算 ...

  5. 巧用 nc 命令传输文件

    今天在业务上云的时候,遇到了些问题.最终发现问题的根源不好排查,于是-- 把生产环境的全量配置文件,还有日志全量打包下载到开发机器分析! 刚入职不是很久的整个运维团队,也不是很熟悉生产环境(有时候觉得 ...

  6. 西门子HMI切换页面时的指示功能

    怎么样才能做到像这样按下切换界面的按钮,切换过去之后对应的切换按钮还进行高亮指示呢? 首先我们要先新建模板,把我们的画面拖拽到模板里就会形成按钮 在画面的"属性"中 在属性中选上我 ...

  7. Python 潮流周刊第 13 期(2023-07-29)

    查看全文: https://pythoncat.top/posts/2023-07-29-weekly 文章&教程 1.Jupyter Notebook 7 隆重发布 (英) 2.Python ...

  8. Uncaught TypeError: Failed to set the 'currentTime' property on 'HTMLMediaElement': The provided double value is non-finite.

    musicSeekTo: function(value){this.audio.currentTime = this.audio.duration*value; }, musicVoiceSeekTo ...

  9. [django]数据的导入和导出

    除了使用mysqldump或者MySQL客户端进行数据导出,django也提供了类似的功能. 导出 # 导出整个数据库并保存为json文件 python manage.py dumpdata > ...

  10. jmeter:内存溢出解决办法

    使用jmeter执行性能测试,报错:java.lang.OutOfMemoryError: Java heap space 需要对jmeter的jvm进行调优.记录如下: 1. 问题记录及分析: 使用 ...