纯tarjan poj2186
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的更多相关文章
- [vijos P1626] 爱在心中
做完Victoria的舞会3,挑了vijos里强连通分量里面难度值最低的题目,也就是这道.先把第一小问做了,纯Tarjan,只是我学的时候的标程是用邻接表的,这题数据小于是用了邻接矩阵,两者之间的切换 ...
- POJ2942:Knights of the Round Table——题解
http://poj.org/problem?id=2942 所写的tarjan练习题最难的一道. 说白了难在考得不是纯tarjan. 首先我们把仇恨关系处理成非仇恨关系的图,然后找双连通分量,在双连 ...
- 强连通分量tarjan缩点——POJ2186 Popular Cows
这里的Tarjan是基于DFS,用于求有向图的强联通分量. 运用了一个点dfn时间戳和low的关系巧妙地判断出一个强联通分量,从而实现一次DFS即可求出所有的强联通分量. §有向图中, u可达v不一定 ...
- 最近切的两题SCC的tarjan POJ1236 POJ2186
两题都是水题,1236第一问求缩点后入度为0的点数,第二问即至少添加多少条边使全图强连通,属于经典做法,具体可以看白书 POJ2186即求缩点后出度为0的那个唯一的点所包含的点数(即SCC里有多少点) ...
- POJ2186 Popular Cows 强连通分量tarjan
做这题主要是为了学习一下tarjan的强连通分量,因为包括桥,双连通分量,强连通分量很多的求法其实都可以源于tarjan的这种方法,通过一个low,pre数组求出来. 题意:给你许多的A->B ...
- POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 23445 Accepted: 9605 Des ...
- 【Tarjan缩点】POJ2186 Popular Cows
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 35644 Accepted: 14532 De ...
- poj2186(tarjan缩点)
题意:有n头奶牛,假如奶牛A觉得奶牛B很厉害,那么就有一条由A指向B的边,然后有个传递关系,if(A→B,B→C,那么A→C),让你求出被除了自己以外所有的奶牛都认为厉害的的奶牛个数: 解题思路:看到 ...
- POJ2186:Popular Cows(tarjan+缩点)
题目解析: 这题题意没什么好说的,解法也挺简单的,只要会tarjan算法+只有一个出度为0的强连通分量题目有解这题就迎刃而解了. #include <iostream> #include ...
随机推荐
- myeclipse trial expired[转]
转自:http://blog.csdn.net/yuyuyuyuy/article/details/5878122 今天MyEclipse提示过期了,MyEclipse Trial Expired. ...
- 1562: [NOI2009]变换序列 - BZOJ
Description Input Output Sample Input 5 1 1 2 2 1 Sample Output 1 2 4 0 3 HINT 30%的数据中N≤50:60%的数据中N≤ ...
- HIVE Transform using 用法
select TRANSFORM(*, *, *) using 'python filter.py' as (*, *, *) from t_1 HIVE支持pipe操作,将select出来的字段,用 ...
- 【块状树】BZOJ 1086: [SCOI2005]王室联邦
1086: [SCOI2005]王室联邦 Time Limit: 10 Sec Memory Limit: 162 MBSec Special JudgeSubmit: 826 Solved: ...
- linux “命令行自动补全”功能用命令
是按Tab键,左上角ESC的下面两个,如果你当前目录只有一项,只需要直接Tab,如果有多项,输入前面不同的部分再Tab,一般输入3个字母就可以,如果按一下没效果,按两下会列出所有项,然后再输入一点自己 ...
- Mac OS X中MacPorts的安装使用备忘
Mac下面除了用dmg.pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样.MacPorts就像apt-get.yum一样,可以快速安装些软件 ...
- Consumer closed input channel or an error occurred. events=0x8 channel is unrecoverably broken and will be disposed(待解决)
跟文件读取有关?关闭文件读取试试. 有可能是读取文件 出现报错
- selenium实战脚本集——新浪微博发送QQ每日焦点(火狐)
selenium实战脚本集(1)——新浪微博发送QQ每日焦点,乙醇用谷歌实现的,下边是用火狐实现的. 代码如下: # coding = utf-8 from selenium import webdr ...
- ZOJ1232 Adventure of Super Mario spfa上的dp
很早之前听说有一种dp是在图上的dp,然后是在跑SPFA的时候进行dp,所以特地找了一题关于在SPFA的时候dp的. 题意:1~a是村庄 a+1~a+b是城堡,存在m条无向边.求由a+b->1的 ...
- [SharePoint 2013 入门教程 3 ] 排版第一个网站集,网站
我们创建了一个TEST网站集,如果你觉得太丑,怎么办,我们一起来给它整整容吧. 点击页面--> 编辑页面 我们现在就可以在页面上添加各种部件,进行布局排版.