题意:找强连通中点数大于2的强连通分量个数
思路:Tarjan

// By SiriusRen
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,ans=0,t=0,cnt=0,tot=1,top=0,dfn[50050],low[50050],p[10050],s[10050];
int xx,yy,jy,first[10050],next[50050],v[50050];
bool vis[50050];
void add(int x,int y){v[tot]=y;next[tot]=first[x];first[x]=tot++;}
void tarjan(int x){dfn[x]=low[x]=++cnt;vis[x]=1,s[++top]=x;for(int i=first[x];i;i=next[i])if(!dfn[v[i]])tarjan(v[i]),low[x]=min(low[x],low[v[i]]);else if(vis[v[i]])low[x]=min(low[x],dfn[v[i]]);if(dfn[x]==low[x]){t++;do jy=s[top--],vis[jy]=0,p[t]++;while(jy!=x);}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d",&xx,&yy),add(xx,yy);for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)if(p[i]>=2)ans++;printf("%d\n",ans);
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532366.html

POJ 3180 Tarjan相关推荐

  1. POJ 2186 Tarjan

    题意:有n(n<=10000)头牛,每头牛都想成为最受欢迎的牛,给出m(m<=50000)个关系,如(1,2)代表1欢迎2,关系可以传递,但是不是相互的,那么就是说1欢迎2不代表2欢迎1, ...

  2. POJ 3694 (tarjan缩点+LCA+并查集)

    好久没写过这么长的代码了,题解东哥讲了那么多,并查集优化还是很厉害的,赶快做做前几天碰到的相似的题. 1 #include <iostream> 2 #include <algori ...

  3. Popular Cows POJ - 2186(tarjan算法)+详解

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

  4. Network of Schools POJ - 1236 tarjan强连通分量缩点

    A number of schools are connected to a computer network. Agreements have been developed among those ...

  5. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

  6. poj 1904 tarjan强连通分量(给国王的2000个儿子找老婆 )

    题意:有n个王子,每个王子i有ki个他喜欢的妹子,每个王子只能和喜欢的妹子结婚,大臣给出一个匹配表(假设肯定是对的),每个王子都和一个妹子结婚,但是国王不满意,他要求大臣给他另一个表,每个王子可以和几 ...

  7. Tarjan(原理、应用)

    目录 Tarjan 一.算法介绍 二.原理 三.应用 1.求强连通分量 例1 [[POJ 3180]](http://poj.org/problem?id=3180) The Cow Prom 例2 ...

  8. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  9. 常用的linux命令cd,linux常用命令:cd 命令

    Linux cd 命令可以说是Linux中最基本的命令语句,其他的命令语句要进行操作,都是建立在使用 cd 命令上的.所以,学习Linux 常用命令,首先就要学好 cd 命令的使用方法技巧. 1. 命 ...

最新文章

  1. centos安装配置nginx,ssl生产和配置教程
  2. TensorFlow中文社区论坛 发布上线!
  3. wxWidgets:wxTextInputStream类用法
  4. VTK:可视化之ElevationBandsWithGlyphs
  5. UVA545 LA5263 Heads【对数】
  6. iOS ASI--POST请求
  7. Asp.net 5种页面转向方法 转载
  8. Windows每月更新补丁离线安装包下载
  9. XCap for Mac(数位显微镜助手)
  10. html代码不兼容edge,edge兼容模式怎么设置?edge浏览器兼容性设置方法
  11. java新闻网站项目描述_基于jsp的新闻网站-JavaEE实现新闻网站 - java项目源码
  12. arcgis api for js绘制箭头图
  13. 在Visual Studio.NET中更改颜色-黑色与白色
  14. 统一修改PCB板上器件标识、阻值,后期方便手工焊接样板。(现以AD10为例)
  15. 门徒Disciples体系:致力于成为“DAO世界”中的集大成者。
  16. 微服务网关搭建(podman+kong+konga)
  17. ./和../以及/之间的区别?终于弄懂,写的很详细!!!
  18. 学习英特尔线程构建模块开源2.1库
  19. 数字孪生的思考 01 - 简述一下数字孪生项目的实现路线
  20. EXCEL 一个工作簿转多个工作簿

热门文章

  1. 编译器是怎样工作的?用lex和yacc 写一个计算器(2)
  2. VSFTPD的虚拟用户管理配置
  3. Save could not be completed. Eclipse国际化的问题解决
  4. Jquery获得控件值的方法
  5. Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践
  6. 重庆南岸召开总结会,今年将引进30家车联网企业
  7. 华为USG地址池方式的NAPT和NAT Server配置案例
  8. 设计模式(策略模式)
  9. 1491: [NOI2007]社交网络
  10. 建站常用13种PHP开源CMS比较