tarjan,叙叙旧咯

#include<cstdio>
#define maxn 50005
int e[maxn],ne[maxn],be[maxn],all;
int DFN[maxn],LOW[maxn],stack[maxn],curr,stak;
bool instack[maxn];
int num,belong[maxn],out[maxn],ans;
void add(int a,int b){
e[++all]=b;
ne[all]=be[a];
be[a]=all;
}
void tarjan(int p){
int j;
DFN[p]=LOW[p]=++curr;
instack[p]=true;
stack[++stak]=p;
for(j=be[p];j!=0;j=ne[j])
if(!DFN[e[j]]){
tarjan(e[j]);
if(LOW[e[j]]<LOW[p]) LOW[p]=LOW[e[j]];
}
else if(instack[e[j]]&&DFN[e[j]]<LOW[p])
LOW[p]=DFN[e[j]];
if(LOW[p]==DFN[p]){
++num;
do{
j=stack[stak--];
belong[j]=num;
instack[j]=false;
}
while (j!=p);
}
}
void solve(int n){
curr=stak=num=0;//curr当前次序 stak栈容量 num队伍号码
for(int i=1;i<=n;i++)
if(!DFN[i]) tarjan(i);
}
int main()
{
int i,j,n,m,a,b;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++){
scanf("%d%d",&a,&b);
add(a,b);
}
solve(n);
for(i=1;i<=n;i++)
for(j=be[i];j!=0;j=ne[j])
if(belong[e[j]]!=belong[i]) ++out[belong[i]];
for(i=1;i<=num;i++)
if(out[i]==0) ans++;
if(ans==1){
ans=0;
for(i=1;i<=num;i++)
if(out[i]==0)
for(j=1;j<=n;j++)
if(belong[j]==i) ++ans;
printf("%d",ans);
}else printf("0");
return 0;
}

纯tarjan poj2186的更多相关文章

  1. [vijos P1626] 爱在心中

    做完Victoria的舞会3,挑了vijos里强连通分量里面难度值最低的题目,也就是这道.先把第一小问做了,纯Tarjan,只是我学的时候的标程是用邻接表的,这题数据小于是用了邻接矩阵,两者之间的切换 ...

  2. POJ2942:Knights of the Round Table——题解

    http://poj.org/problem?id=2942 所写的tarjan练习题最难的一道. 说白了难在考得不是纯tarjan. 首先我们把仇恨关系处理成非仇恨关系的图,然后找双连通分量,在双连 ...

  3. 强连通分量tarjan缩点——POJ2186 Popular Cows

    这里的Tarjan是基于DFS,用于求有向图的强联通分量. 运用了一个点dfn时间戳和low的关系巧妙地判断出一个强联通分量,从而实现一次DFS即可求出所有的强联通分量. §有向图中, u可达v不一定 ...

  4. 最近切的两题SCC的tarjan POJ1236 POJ2186

    两题都是水题,1236第一问求缩点后入度为0的点数,第二问即至少添加多少条边使全图强连通,属于经典做法,具体可以看白书 POJ2186即求缩点后出度为0的那个唯一的点所包含的点数(即SCC里有多少点) ...

  5. POJ2186 Popular Cows 强连通分量tarjan

    做这题主要是为了学习一下tarjan的强连通分量,因为包括桥,双连通分量,强连通分量很多的求法其实都可以源于tarjan的这种方法,通过一个low,pre数组求出来. 题意:给你许多的A->B ...

  6. POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23445   Accepted: 9605 Des ...

  7. 【Tarjan缩点】POJ2186 Popular Cows

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 35644   Accepted: 14532 De ...

  8. poj2186(tarjan缩点)

    题意:有n头奶牛,假如奶牛A觉得奶牛B很厉害,那么就有一条由A指向B的边,然后有个传递关系,if(A→B,B→C,那么A→C),让你求出被除了自己以外所有的奶牛都认为厉害的的奶牛个数: 解题思路:看到 ...

  9. POJ2186:Popular Cows(tarjan+缩点)

    题目解析: 这题题意没什么好说的,解法也挺简单的,只要会tarjan算法+只有一个出度为0的强连通分量题目有解这题就迎刃而解了. #include <iostream> #include ...

随机推荐

  1. 打造自己的程序员品牌(摘自Infoq)

    John Sonmez是Simple Programmer的创始人.作者与程序员,关注于如何让复杂的事情变得简单.他是一位专业的软件开发者.架构师与讲师,感兴趣的领域包括测试驱动开发.如何编写整洁的代 ...

  2. 在云服务器搭建WordPress博客(五)创建和管理文章分类

    不同主题的文章划分到不同的分类,有助于访客寻找他们想要的内容,提高用户体验.所以,为你的网站创建文章分类是很有必要的.那么,WordPress系统如何创建和管理文章分类呢?今天倡萌就简单介绍一下. 创 ...

  3. HTML+CSS入门

    <strong>加粗</strong> <em>斜体</em> <p>段落</p> <span>设置单独样式< ...

  4. 【UVA】【11762】Race to 1(得到1)

    数学期望/马尔可夫过程 DP/记忆化搜索 刘汝佳老师白书上的例题…… //UVA 11762 #include<vector> #include<cstdio> #includ ...

  5. Leetcode#78 Subsets

    原题地址 有两种方法: 1. 对于序列S,其子集可以对应为一个二进制数,每一位对应集合中的某个数字,0代表不选,1代表选,比如S={1,2,3},则子集合就是3bit的所有二进制数. 所以,照着二进制 ...

  6. PHP创建XML文件讲解

    <?php   #code by coder_apex 2007-6-15   #自动生成一个如下的XML文件   #   #       <?xml version="1.0& ...

  7. OWASP

    开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正.实际.有成本效益的信息.其目的 ...

  8. spoj 1108

    要求输出一个牌的顺序 使每隔1.2.......n翻牌后出现1 2 3 4 5 6 7 8 9 .... n 将牌想象成n个空格  正向推 空n个位置放n 循环 需优化 #include <io ...

  9. Unity3d开发wp8问题汇总

    原地址:http://blog.csdn.net/sunshine_1984/article/details/12849117 .wp8应用点击返回键没有响应将Unity3d导出wp8工程后,编译工程 ...

  10. 中小企业 IT 运维福利:快速构建 on-call 机制

    大多 IT 运营支撑同学都有过深夜业务应用突然故障的经历,监控系统准确告警,但是白天筋疲力尽的运维同学在熟睡中,经常会遗漏告警提醒:往往是接到主管电话(用户投诉了)才处理.有什么办法解决该问题呢?大多 ...