poj_2186: Popular Cows(tarjan基础题)
题意:求在图上可以被所有点到达的点的数量。
首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG)。
在这个DAG上,若存在不止一个所有点均可到达的点,则所有点不满足题目要求。若存在一个,则该点所代表的连通分量的点数即为答案。
//DAG(有向无环图)上面至少存在一个出度为0的点,否则必然可以成环。
#include<cstdio> #include<cstring> #include<stack> #include<vector> using namespace std; typedef long long LL; ; int n,m; int idd; //用来给点标记所属连通分量 int cnt[N]; //cnt[idd]表示编号为idd的连通分量的大小 int id[N]; //记录所属的连通分量 int now,dfn[N]; //表示搜索次序 int low[N]; //记录强连通分量子树的根节点的搜索次序 int d[N]; //d[i]==0时表示,编号为i的连通分量不认为任何其他分量popular int vis[N],instack[N]; vector<int> adj[N]; stack<int> st; void init() { idd=; memset(vis,,sizeof(vis)); memset(d,,sizeof(d)); ; i<=n; i++) adj[i].clear(); while(!st.empty()) st.pop(); now=; //now 表示 tarjan次序 } void tarjan(int u) { dfn[u]=low[u]=now++; //标记被访问时间 vis[u]=instack[u]=; st.push(u); ; i<adj[u].size(); i++) { int x=adj[u][i]; //x表示下一个 if(!vis[x]) { tarjan(x); low[u]=min(low[u],low[x]); } else if(instack[x]) low[u]=min(low[u],dfn[x]); //注意两个min的区别 } if(dfn[u]==low[u]) //u结点为根节点 { ,res=; while(!st.empty()&&nowp!=u) { nowp=st.top(),st.pop(); instack[nowp]=; id[nowp]=idd; res++; } cnt[idd++]=res; //将连通分量的点数记录下来 } } int main() { while(~scanf("%d%d",&n,&m)) { init(); ; i<m; i++) { int u,v; scanf("%d%d",&u,&v); adj[v].push_back(u); } ; i<=n; i++) //强连通分量缩点 if(!vis[i]) tarjan(i); ; i<=n; i++) ; j<adj[i].size(); j++) if(id[i]!=id[adj[i][j]]) d[id[adj[i][j]]]++; ; ; i<idd; i++) if(!d[i]) res++; ) ; i<idd; i++) { ) { printf("%d\n",cnt[i]); break; } } else puts("); } }
poj_2186: Popular Cows(tarjan基础题)的更多相关文章
- POJ 2186:Popular Cows Tarjan模板题
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25945 Accepted: 10612 De ...
- POJ 2168 Popular cows [Tarjan 缩点]
...
- poj 2186 Popular Cows tarjan
Popular Cows Description Every cow's dream is to become the most popular cow in the herd. In a herd ...
- poj 2186: Popular Cows(tarjan基础题)
题目链接 tarjan参考博客 题意:求在图上可以被所有点到达的点的数量. 首先通过tarjan缩点,将所有内部两两可达的子图缩为一点,新图即为一个有向无环图(即DAG). 在这个DAG上,若存在不止 ...
- POJ - 2186 Popular Cows tarjain模板题
http://poj.org/problem?id=2186 首先求出所有的强连通分量,分好块.然后对于每一个强连通分量,都标记下他们的出度.那么只有出度是0 的块才有可能是答案,为什么呢?因为既然你 ...
- [poj 2186]Popular Cows[Tarjan强连通分量]
题意: 有一群牛, a会认为b很帅, 且这种认为是传递的. 问有多少头牛被其他所有牛认为很帅~ 思路: 关键就是分析出缩点之后的有向树只能有一个叶子节点(出度为0). 做法就是Tarjan之后缩点统计 ...
- POJ 2186 Popular Cows tarjan缩点算法
题意:给出一个有向图代表牛和牛喜欢的关系,且喜欢关系具有传递性,求出能被所有牛喜欢的牛的总数(除了它自己以外的牛,或者它很自恋). 思路:这个的难处在于这是一个有环的图,对此我们可以使用tarjan算 ...
- USACO 2003 Fall Orange Popular Cows /// tarjan缩点 oj22833
题目大意: n头牛,m个崇拜关系,并且崇拜具有传递性 如果a崇拜b,b崇拜c,则a崇拜c 求最后有几头牛被所有牛崇拜 强连通分量内任意两点都能互达 所以只要强联通分量内有一点是 那么其它点也都会是 按 ...
- POJ 3180 The cow Prom Tarjan基础题
题目用google翻译实在看不懂 其实题目意思如下 给一个有向图,求点个数大于1的强联通分量个数 #include<cstdio> #include<algorithm> #i ...
随机推荐
- 一天搞定HTML----标签类型与类型转换05
标签类型: 标签只有两类:行内元素和块元素 行内元素:内容撑开宽高 块元素:默认独占一行 注意: 在使用display时,会遇到一种inline-block类型的标签.这种标签不属于标签的分类. 1. ...
- Java IO流之普通文件流和随机读写流区别
普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...
- 基于Python + requests 的web接口自动化测试框架
之前采用JMeter进行接口测试,每次给带新人进行培训比较麻烦,干脆用python实现,将代码和用例分离,易于维护. 项目背景 公司的软件采用B/S架构,进行数据存储.分析.管理 工具选择 pytho ...
- VR全景,让VR不再是“空中楼阁“——智慧城市常诚
VR的风口来了又走,而VR技术的支持者却始终在探索VR在各个领域的应用.最近,有业内专家表示,VR给带来的真正好处是,容易让人产生同理心,但同理心究竟能帮助我们做什么呢? 我第一次见到挪威建筑师Haa ...
- cpp(第十章)
1. const class & func(const class &) const { do something.. } 第一个const返回后的类不允许被赋值,第二个const不允 ...
- 仿flash轮播
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- Thinkphp 3.0-3.1版代码执行漏洞
近日360库带计划中播报的ThinkPHP扩展类库的漏洞已经查明原因:系官方扩展模式中的Lite精简模式中存在可能的漏洞(原先核心更新安全的时候 并没有更新模式扩展部分,现已更新).对于使用标准模式或 ...
- iter迭代器的应用
迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 用户不用关心迭代器的内部结构,仅需通过next方法不断去读取下一个内容 不能随机访问任意一个内容,只 ...
- Vue 爬坑之路(二)—— 组件之间的数据传递
Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,com ...
- mysql字符编码设置
1.显示当前编码信息 mysql>show variables like '%character%' +--------------------------+------------------ ...