就是看是否有一些点,从其他任何点出发都可到达

定理:有向无环图中唯一出度为0的点,一定可以由任何点出发均可达。

所以缩点,若出度为零的点(强联通分量)唯一,则答案为该强联通分量中点的度数。

若不唯一,答案为0,易证。

Code(懒得Tarjan,用了两次DFS):

 #include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
vector<int>order;
int v[],first[],next[],en;
int a[],b[],scc[],num[],sum,chu[];
bool vis[];
int n,m;
inline void AddEdge(const int &U,const int &V){v[++en]=V;next[en]=first[U];first[U]=en;}
void Clear()
{
memset(v,,sizeof(v));
memset(first,,sizeof(first));
memset(next,,sizeof(next));
en=;
}
void dfs(int cur)
{
vis[cur]=true;
for(int i=first[cur];i;i=next[i])
if(!vis[v[i]])
dfs(v[i]);
order.push_back(cur);
}
void dfs2(int cur,int sum)
{
vis[cur]=true;
scc[cur]=sum;
num[sum]++;
for(int i=first[cur];i;i=next[i])
if(!vis[v[i]])
dfs2(v[i],sum);
}
void Scc()
{
for(int i=;i<=n;i++)
if(!vis[i])
dfs(i);
memset(vis,false,sizeof(vis));Clear();
for(int i=;i<=m;i++)AddEdge(b[i],a[i]);
int sz=order.size();
for(int i=sz-;i>=;i--)
if(!vis[order[i]])
dfs2(order[i],++sum);
}
int Exam()
{
int cnt=,Record;
for(int i=;i<=m;i++)
if(scc[a[i]]!=scc[b[i]])
chu[scc[a[i]]]++;
for(int i=;i<=sum;i++)
if(!chu[i])
{
cnt++;
Record=i;
if(cnt==)
return ;
}
return num[Record];
}
int res;char C;
inline int Get()
{
res=;C='*';
while(C<''||C>'')C=getchar();
while(C>=''&&C<=''){res=res*+(C-'');C=getchar();}
return res;
}
int main()
{
n=Get();m=Get();
for(int i=;i<=m;i++){a[i]=Get();b[i]=Get();AddEdge(a[i],b[i]);}
Scc();printf("%d\n",Exam());
return ;
}

【强联通分量缩点】【Tarjan】bzoj1051 [HAOI2006]受欢迎的牛的更多相关文章

  1. [BZOJ1051][HAOI2006] 受欢迎的牛 tarjan求联通分量

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

  2. [BZOJ1051] [HAOI2006] 受欢迎的牛 (强联通分量)

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

  3. Tarjan求强联通分量+缩点

    提到Tarjan算法就不得不提一提Tarjan这位老人家 Robert Tarjan,计算机科学家,以LCA.强连通分量等算法闻名.他拥有丰富的商业工作经验,1985年开始任教于普林斯顿大学.Tarj ...

  4. bzoj1051: [HAOI2006]受欢迎的牛(强联通)

    1051: [HAOI2006]受欢迎的牛 题目:传送门 题解: 今天又做一道水题... 强联通啊很明显 水个模板之后统计一下每个强联通分量中点的个数,再统计一下出度... 不难发现:缩点之后当且仅当 ...

  5. bzoj1051 [HAOI2006]受欢迎的牛 tarjan&&缩点

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

  6. 【强联通分量缩点】【最长路】【spfa】CH Round #59 - OrzCC杯NOIP模拟赛day1 队爷的讲学计划

    10分算法:对于城市网络为一条单向链的数据, 20分算法:对于n<=20的数据,暴力搜出所有的可能路径. 结合以上可以得到30分. 60分算法:分析题意可得使者会带着去的城市也就是这个城市所在强 ...

  7. 【最小割】【Dinic】【强联通分量缩点】bzoj1797 [Ahoi2009]Mincut 最小割

    结论: 满足条件一:当一条边的起点和终点不在 残量网络的 一个强联通分量中.且满流. 满足条件二:当一条边的起点和终点分别在 S 和 T 的强联通分量中.且满流.. 网上题解很多的. #include ...

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

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

  9. [Bzoj1051][HAOI2006]受欢迎的牛(缩环)

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

随机推荐

  1. hdu 1869 六度分离(最短路floyd)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869 六度分离 Time Limit: 5000/1000 MS (Java/Others)    M ...

  2. 【Matlab】让Matlab程序发出声音

    我有时候运行一段很长的代码,在等待的时候去做别的事,希望程序运行完可以有一个提示音. 这可以用matlab的一个函数sound实现,该函数的输入参量是音频数据向量.采样频率和转换位数. % 响一声 s ...

  3. defconfig file 的 位置

    Platform MSM8917 MSM8937 defconfig file position Android/kernel/msm-3.18/arch/arm/configs/

  4. MSCL超级工具类(C#),开发人员必备,开发利器

    MSCL超强工具类库 是基于C#开发的超强工具类集合,涵盖了日常B/S或C/S开发的诸多方面,包含上百个常用封装类(数据库操作类全面支持Mysql.Access.Oracle.Sqlserver.Sq ...

  5. uoj#35 后缀排序(后缀数组模版)

    #include<bits/stdc++.h> #define N 100005 using namespace std; char s[N]; int a[N],c[N],t1[N],t ...

  6. [Think] position与anchorPoint关系

    1.简介: 最近在学习动画,所以接触到了CAlayer类. 其中的position与anchorPoint关系一感觉一头雾水,网上有篇文章 彻底理解position和anchorPoint关系  里面 ...

  7. C#判断目录是否为隐藏

    判断方法: DirectoryInfo di = new DirectoryInfo(path); if ((di.Attributes & FileAttributes.Hidden) == ...

  8. Linked List Cycle I&&II——快慢指针(II还没有完全理解)

    Linked List Cycle I Given a linked list, determine if it has a cycle in it. Follow up: Can you solve ...

  9. Linux文件系统中/tmp的临时文件清理说明

    https://www.cnblogs.com/MonkeyAC/articles/3631401.html

  10. windows10 易升 下载失败 解决方法

    在你剩余最大空间的硬盘里有一个名字大概是Windows10Updata的文件夹里找到一个名字14339开头的升级镜像,把这个文件的名字用记事本保存下来方便以后使用,同时在这个文件夹里还有一个叫prod ...