[BZOJ 1051][HAOI2006]受欢迎的牛:强连通分量
2017-04-11 14:57
435 查看
点击这里查看原题
可以用双dfs法分解强连通分量,答案只可能是最后一个强连通分量中的牛的数量或0,要判断是否为0,可以从最后一个强连通分量中的任一点出发,若不能遍历所有点,则答案为0。
可以用双dfs法分解强连通分量,答案只可能是最后一个强连通分量中的牛的数量或0,要判断是否为0,可以从最后一个强连通分量中的任一点出发,若不能遍历所有点,则答案为0。
/* User:Small Language:C++ Problem No.:1051 */ #include<bits/stdc++.h> #define ll long long #define inf 999999999 using namespace std; const int M=1e5+5; int n,m,fir[M],tot,rtot,rfir[M],col[M],ans,dfn,g[M],u; bool vis[M]; struct edge{ int v,nex; }e[5*M],re[5*M]; void add(int u,int v){ e[++tot]=(edge){v,fir[u]}; fir[u]=tot; re[++rtot]=(edge){u,rfir[v]}; rfir[v]=rtot; } void dfs(int u){ vis[u]=1; for(int i=fir[u];i;i=e[i].nex){ int v=e[i].v; if(vis[v]==0) dfs(v); } g[++dfn]=u; } void rdfs(int u,int k){ col[u]=k; vis[u]=1; for(int i=rfir[u];i;i=re[i].nex){ int v=re[i].v; if(vis[v]==0) rdfs(v,k); } } int scc(){ int res=0; memset(vis,0,sizeof(vis)); for(int i=1;i<=n;i++) if(!vis[i]) dfs(i); memset(vis,0,sizeof(vis)); for(int i=n;i;i--) if(!vis[g[i]]) rdfs(g[i],++res); return res; } int main(){ freopen("data.in","r",stdin);// scanf("%d%d",&n,&m); while(m--){ int u,v; scanf("%d%d",&u,&v); add(u,v); } int k=scc(); for(int i=1;i<=n;i++){ if(col[i]==k){ ans++; u=i; } } memset(vis,0,sizeof(vis)); rdfs(u,0); for(int i=1;i<=n;i++){ if(!vis[i]){ ans=0; break; } } printf("%d\n",ans); return 0; }
相关文章推荐
- 【bzoj1051】【HAOI2006】【受欢迎的牛】【强连通分量】
- 【强连通分量】Bzoj1051 HAOI2006 受欢迎的牛
- bzoj1051 [HAOI2006]受欢迎的牛(tarjan求强连通分量)
- BZOJ 1051: [HAOI2006]受欢迎的牛 强连通分量,Tarjan缩点
- bzoj1051: [HAOI2006]受欢迎的牛(tarjan强连通分量)
- [bzoj1051][HAOI2006]受欢迎的牛——强连通分量
- [bzoj-1051] [HAOI2006]受欢迎的牛
- BZOJ 1051 [HAOI2006]受欢迎的牛
- [HAOI2006][BZOJ1051] 受欢迎的牛
- BZOJ 1051: [HAOI2006]受欢迎的牛【Trajan】
- BZOJ 1051: [HAOI2006]受欢迎的牛 强连通缩点
- [BZOJ1051][HAOI2006]受欢迎的牛(tarjan)
- 【BZOJ】【P1051】【HAOI2006】【受欢迎的牛】【强连通分量】
- bzoj 1051 HAOI2006 受欢迎的牛 强联通分量+拓扑排序
- 【bzoj 1051】[HAOI2006]受欢迎的牛
- [BZOJ1051][HAOI2006]受欢迎的牛(Tarjan缩点)
- [bzoj1051][HAOI2006]受欢迎的牛【tarjan】
- [BZOJ1051] [HAOI2006] 受欢迎的牛 - tarjan强连通分量
- BZOJ1051: [HAOI2006]受欢迎的牛
- [BZOJ1051][HAOI2006]受欢迎的牛 做题笔记