[Luogu 2341] HAOI2006 受欢迎的牛

<题目链接>


智能推的水题,一看是省选题就给做了,做一半才发现 Tarjan 算法忘干净了。

Tarjan 求出SCC,算出每一个 SCC 包含原图的点数(size)以及新图上的出度(out)

并不用建图,Tarjan 时记一下 SCC 编号和 size,缩点时记录 out 就好了。

若存在唯一出度为 \(0\) 的 SCC,则这个 SCC 中所有的牛都是明星,即明星数量为这个 SCC 的 out。

否则答案为 \(0\)。

#include <algorithm>
#include <cstdio>
#include <stack>
using std::min;
using std::stack;
const int MAXN=10010,MAXM=50010;
bool exist[MAXN];
int n,m,cnt,num,sum,head[MAXN],DFN[MAXN],low[MAXN],SCC[MAXN],size[MAXN],out[MAXN];
stack<int> st;
struct edge
{
int nxt,to;
edge(int nxt=0,int to=0):nxt(nxt),to(to){}
}e[MAXM];
void AddEdge(int u,int v)
{
e[++cnt]=edge(head[u],v),head[u]=cnt;
}
void Tarjan(int u)
{
st.push(u),exist[u]=1,DFN[u]=low[u]=++num;
for(int i=head[u],v;i;i=e[i].nxt)
if(!DFN[v=e[i].to])
Tarjan(v),low[u]=min(low[u],low[v]);
else if(exist[v])
low[u]=min(low[u],DFN[v]);
if(DFN[u]==low[u])
{
++sum;
for(int t;u!=t;)
exist[t=st.top()]=0,st.pop(),++size[SCC[t]=sum];
}
}
void Shrink(void)
{
for(int u=1;u<=n;++u)
for(int i=head[u],v;i;i=e[i].nxt)
if(SCC[u]^SCC[v=e[i].to])
++out[SCC[u]];
}
int Ans(void)
{
int ans=0;
for(int i=1;i<=sum;++i)
if(!out[i])
if(ans)
return 0;
else
ans=size[i];
return ans;
}
int main(int argc,char *argv[])
{
scanf("%d %d",&n,&m);
for(int i=1,u,v;i<=m;++i)
{
scanf("%d %d",&u,&v);
AddEdge(u,v);
}
for(int i=1;i<=n;++i)
if(!DFN[i])
Tarjan(i);
Shrink();
printf("%d\n",Ans());
return 0;
}

谢谢阅读。

最新文章

  1. angular2
  2. c#判断IP是否可以Ping通
  3. 【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构
  4. WPF中父子窗口的层次关系
  5. awk笔记
  6. ZigBee无线网络技术在小区路灯照明系统的应用
  7. table点击一行显示下一行的特效
  8. django中的Model模型一:
  9. 【学习笔记】Spring JdbcTemplate (3-3-3)
  10. Linux系统网络性能实例分析
  11. kmp算法:
  12. G - Galactic Collegiate Programming Contest Kattis - gcpc (set使用)
  13. 小游戏——金庸奇侠传(JAVA,对面向对象的进一步了解)
  14. 【Eclipse】eclipse中格式化代码配置方法
  15. 12-简单认识下margin
  16. [Windows] 解决 VLC Media Player 的 Crash Reporting 消息弹窗
  17. 【英宝通Unity4.0公开课学习 】(三)脚本使用
  18. JMeter中用java修改文件名称
  19. MQ测试
  20. Mybatis 别名机制,自动扫描 数据的增删改

热门文章

  1. CentOS Openvpn搭建以及 linux&amp;&amp;windows客户端的连接
  2. Python中的global和nonlocal
  3. servlet映射路径
  4. hibernate.cfg.xml的详细解释
  5. Git 应用补丁报错 “sha1 information is lacking or useless”
  6. Code Quality
  7. Swift &amp; Unicode
  8. TCP标志位简析
  9. BZOJ 1486 最小圈(01分数规划)
  10. Xshell访问本地或者远程Linux虚拟机