Popular Cows

题意:一只牛崇拜另外一只牛,这种崇拜关系可以传导。A->B,B->C =>A->C。现在给出所有的关系问你有多少牛被其他所有的牛都崇拜。

思路:就是一个tarjan裸模板求出所有的点的low和dfn值,让后通过缩点的方法,确定那些出度为0的点。符合条件的牛肯定就在tarjan求出的所有强连通分量里。缩点后它不会有出度。如果缩点后有多个出度为0的点那么就不存在符合条件的牛了。

int n,m,top,c,ti,low[N],Stack[N],vis[N],dfn[N],chu[N],belong[N],num[N];//每个点的入度;
vector<int>g[N];
void init()
{
c=ti=top=0;
for(int i=1; i<N; i++) g[i].clear();
memset(low,0,sizeof(low));
memset(dfn,0,sizeof(dfn));
memset(vis,0,sizeof(vis));
memset(chu,0,sizeof(chu));
memset(num,0,sizeof(num));
memset(Stack,0,sizeof(Stack));
memset(belong,0,sizeof(belong));
}
void tarjan(int u)
{
int v;
low[u]=dfn[u]=++ti;
vis[u]=1;
Stack[top++]=u;
int len=g[u].size();
for(int j=0; j<len; j++)
{
v=g[u][j];
if(!dfn[v])
{
tarjan(v);
low[u]=min(low[u],low[v]);
}
else if(vis[v]&&low[u]>dfn[v]) low[u]=dfn[v];
}
if(low[u]==dfn[u])
{
c++;
do
{
v=Stack[--top];
// printf("%d %d\n",v,c);
vis[v]=0;
belong[v]=c;
num[c]++;
}
while(u!=v);
}
}
int solve()
{
for(int i=1; i<=n; i++) if(!dfn[i]) tarjan(i);
for(int i=1;i<=n;i++)
{
for(int j=0;j<g[i].size();j++)
{
int v=g[i][j];
if(belong[i]!=belong[v]) chu[belong[i]]++;
}
}
int numm=0,ans=0;
for(int i=1;i<=c;i++) if(!chu[i])
{
numm++;//出度为0的分量
ans=num[i];
}
// if(!numm) ans=n;
if(numm>1) ans=0;
return ans;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int u,v;
for(int i=0; i<m; i++)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
}
int ans=solve();
pd(ans);
}
return 0;
}


POJ-2186 Popular Cows,tarjan缩点找出度为0的点。的更多相关文章

  1. POJ 2186 Popular Cows tarjan缩点算法

    题意:给出一个有向图代表牛和牛喜欢的关系,且喜欢关系具有传递性,求出能被所有牛喜欢的牛的总数(除了它自己以外的牛,或者它很自恋). 思路:这个的难处在于这是一个有环的图,对此我们可以使用tarjan算 ...

  2. POJ 2168 Popular cows [Tarjan 缩点]

                                                                                                         ...

  3. 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 ...

  4. [poj 2186]Popular Cows[Tarjan强连通分量]

    题意: 有一群牛, a会认为b很帅, 且这种认为是传递的. 问有多少头牛被其他所有牛认为很帅~ 思路: 关键就是分析出缩点之后的有向树只能有一个叶子节点(出度为0). 做法就是Tarjan之后缩点统计 ...

  5. POJ 2186 Popular cows(SCC 缩点)

    Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= 10, ...

  6. 强连通分量分解 Kosaraju算法 (poj 2186 Popular Cows)

    poj 2186 Popular Cows 题意: 有N头牛, 给出M对关系, 如(1,2)代表1欢迎2, 关系是单向的且能够传递, 即1欢迎2不代表2欢迎1, 可是假设2也欢迎3那么1也欢迎3. 求 ...

  7. tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows

    缩点练习 洛谷 P3387 [模板]缩点 缩点 解题思路: 都说是模板了...先缩点把有环图转换成DAG 然后拓扑排序即可 #include <bits/stdc++.h> using n ...

  8. poj 2186 Popular Cows (强连通分量+缩点)

    http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissi ...

  9. poj 2186 Popular Cows 【强连通分量Tarjan算法 + 树问题】

    题目地址:http://poj.org/problem?id=2186 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Sub ...

随机推荐

  1. 6、旋转数组的最小位置------------>剑指offer系列

    题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转, ...

  2. 设置office首字母不变大小的手段

    选项->校对—〉自动更正选项->“自动更正”页,句首字母大写,取消就行了

  3. 运行spark自带的例子出错及解决

    以往都是用java运行spark的没问题,今天用scala在eclipse上运行spark的代码倒是出现了错误 ,记录 首先是当我把相关的包导入好后,Run,报错: Exception in thre ...

  4. 使用Google Colab训练神经网络(二)

    Colaboratory 是一个 Google 研究项目,旨在帮助传播机器学习培训和研究成果.它是一个 Jupyter 笔记本环境,不需要进行任何设置就可以使用,并且完全在云端运行.Colaborat ...

  5. ASP.NET 开发人员不必担心 Node 的五大理由

    哦别误会……我真的很喜欢 Node,而且我觉得它提出的概念和模式将在很长一段时间内,对服务端 Web 编程产生深远的影响.即使随着时间的推移 Node 过气了,我们肯定可以从下一个牛逼玩意身上或多或少 ...

  6. Xcode及Mac快捷键

    1. 文件 CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + S ...

  7. JS添加验证页面中script标签中是否存在jquery文件

    window.onload = function() { var al = document.getElementsByTagName("script"); var new_ele ...

  8. POJ 3080 Blue Jeans、POJ 3461 Oulipo——KMP应用

    题目:POJ3080 http://poj.org/problem?id=3080 题意:对于输入的文本串,输出最长的公共子串,如果长度相同,输出字典序最小的. 这题数据量很小,用暴力也是16ms,用 ...

  9. NOIp2018心得

    NOIp2018 身为一名只会PJ的蒟蒻 我带着试试的心态(为了省一次中考哈哈哈) 同时报了PJ和TG??! TGD1T1是一道洛谷原题 都是提高组签到题 铺设道路 本蒻好像A了 然而某些dalao们 ...

  10. UVa-1368-DNA序列

    这题的话,我们每次统计的话,是以列为外层循环,以行为内层循环,逐一按列进行比较. 统计完了之后,题目中要求说到要hamming值最小的,那我们就选用该列最多的字母就可以了,如果有数目相等的字母,那就按 ...