HDU 3836
来源:互联网 发布:魔灵召唤淘宝代充 编辑:程序博客网 时间:2024/06/08 05:00
#include<stdio.h>#include<string.h>#include<stack>#include<string>#include<math.h>#include<queue>#include<set>#include<algorithm>#include<iostream>#include<vector>#include<map>using namespace std;#define LL long long#define inf 1<<30#define N 20010vector<int>edge[N];int low[N],dfn[N],belong[N],In[N],Out[N];stack<int>s;bool vis[N];int Index,cnt;void tarjan(int u){ int i,v; low[u]=dfn[u]=++Index; s.push(u); vis[u]=1; for(i=0;i<edge[u].size();i++) { v=edge[u][i]; if(dfn[v]==0) { tarjan(v); low[u]=min(low[u],low[v]); } else if(vis[v]) low[u]=min(low[u],dfn[v]); } if(low[u]==dfn[u]) { cnt++; while(1) { v=s.top();s.pop(); belong[v]=cnt; vis[v]=0; if(v==u) break; } }}int main(){ int i,j,n,m,u,v,t; while(scanf("%d%d",&n,&m)!=-1) { while(!s.empty()) s.pop(); for(i=1;i<=n;i++) edge[i].clear(); for(i=0;i<m;i++) { scanf("%d%d",&u,&v); edge[v].push_back(u); } memset(dfn,0,sizeof(dfn)); memset(vis,0,sizeof(vis)); Index=cnt=0; for(i=1;i<=n;i++) { if(!dfn[i]) tarjan(i); } memset(In,0,sizeof(In)); memset(Out,0,sizeof(Out)); for(u=1;u<=n;u++) { for(i=0;i<edge[u].size();i++) { v=edge[u][i]; if(belong[u]!=belong[v]) { In[belong[v]]++; Out[belong[u]]++; } } } int in=0,out=0; for(i=1;i<=cnt;i++) { if(In[i]==0)in++; if(Out[i]==0)out++; } if(cnt==1) printf("0\n"); else printf("%d\n",max(in,out)); } return 0;}
0 0
- HDU 3836
- HDU 3836
- HDU 3836
- HDU 3836
- hdu 3836
- hdu 3836 (加边构强连通)
- hdu 3836 Equivalent Sets
- HDU 3836 强联通
- hdu 3836 Equivalent Sets
- HDU 3836 Equivalent Sets
- hdu 3836 Equivalent Sets
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- Advanced Global Illumination in Unity 5 - Unite Europe 2015
- cmath中的pi
- 设计模式——7个设计原则
- Java中继承thread类与实现Runnable接口的区别
- Hibernate Search 的常用注解
- HDU 3836
- 让用户做测试员 利用IIS自定义错误页
- Java中的Runnable、Callable、Future、FutureTask的区别与示例
- Hadoop介绍
- Linux Shell中的变量-自定义变量
- hdu 5487 Difference of Languages BFS
- iOS开发-XIB、Storyboard操作小技巧
- 值传递and引用传递
- centos 6.5 搭建dhcp服务器