受欢迎的牛(Tarjan模板题)
来源:互联网 发布:网络公司源码 编辑:程序博客网 时间:2024/06/07 19:16
题目:
每一头牛的愿望就是变成一头最受欢迎的牛。现在有 N 头牛,给你 M 对整数(A,B),表示牛A认为牛B受欢迎。这种关系是具有传递性的,如果 A 认为 B 受欢迎,B 认为 C 受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头牛被所有的牛认为是受欢迎的。
输入:
第一行两个数 N,M 。
接下来 M 行,每行两个数 A,B,意思是 A 认为 B 是受欢迎的(给出的信息有可能重复,即有可能出现多个 A,B)
输出:
输出一个整数,即有多少头牛被所有的牛认为是受欢迎的。如果没有满足这种条件的情况,输出“0”。
EG:
in:
3 3
1 2
2 1
2 3
out:
1
代码:
#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<ctime>#include<algorithm>#include<cctype>#include<queue>using namespace std;struct hehe{ int u,v,next;}bian[100050];int n,m;int low[500050],dfn[500050];int num[500050],head[500050],chudu[500050],belong[500050];int zhan[500050];int cnt=0,tj=0,top=0,tot=0;bool fangwen[500050];inline void jianbian(int U,int V){ tj++; bian[tj].u=U; bian[tj].v=V; bian[tj].next=head[U]; head[U]=tj;}inline void soudian(int u){ low[u]=dfn[u]=++cnt; zhan[++top]=u; fangwen[u]=true; for(int p=head[u];p!=-1;p=bian[p].next) { int v=bian[p].v; if(!dfn[v]) { soudian(v); low[u]=min(low[u],low[v]); } else if(fangwen[v]) low[u]=min(low[u],dfn[v]); } if(low[u]==dfn[u]) { ++tot; int v=-1; while(u!=v) { v=zhan[top--]; belong[v]=tot; num[tot]++; fangwen[v]=false; } }}int main(){ memset(head,-1,sizeof(head)); cin>>n>>m; for(int i=1;i<=m;++i) { int u,v; cin>>u>>v; jianbian(u,v); } for(int i=1;i<=n;++i) if(!dfn[i]) soudian(i); for(int i=1;i<=m;++i) if(belong[bian[i].u]!=belong[bian[i].v]) chudu[belong[bian[i].u]]++; int res=0,ans; for(int i=1;i<=tot;++i) if(chudu[i]==0) { res++; ans=i; } if(res==1) cout<<num[ans]; else cout<<0; return 0;}
0 0
- 受欢迎的牛(Tarjan模板题)
- 计蒜客 受欢迎的蒜头(tarjan缩点构图模板)
- bzoj1051:受欢迎的牛(tarjan)
- bzoj1051 受欢迎的牛 tarjan
- BZOJ1051 受欢迎的牛 [Tarjan]
- bzoj 1051: [HAOI2006]受欢迎的牛(tarjan 缩点)
- 【bzoj 1051】[HAOI2006]受欢迎的牛(Tarjan缩点)
- tarjan学习笔记(poj2186&&bzoj1051受欢迎的牛)
- [HAOI2006]受欢迎的牛(缩点+Tarjan)
- 2017-07-14:Tarjan(受欢迎的牛)
- [HAOI2006]受欢迎的牛(Tarjan+并查集)
- 受欢迎的牛bzoj1051(浅谈tarjan——(3))
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan
- 【tarjan】BZOJ 1051:受欢迎的牛
- 【BZOJ1051】受欢迎的牛,tarjan缩点重构图
- 【BZOJ 1051】 受欢迎的牛 【Tarjan】
- 【HAOI2006】受欢迎的牛 tarjan+入度出度
- 【Tarjan】BZOJ1051(HAOI2006)[受欢迎的牛]题解
- 调整图片之简介
- python3+PyQt5 实现多文档界面(MDI)
- C4-3 一元二次方程求解
- 函数模板template
- Ip分类和子网掩码
- 受欢迎的牛(Tarjan模板题)
- LoadRunner调试问题之如何使用脚本错误日志
- Leetcode001-Two Sun
- Wireshark2.0.1在VS2013编译实战
- binary-search-tree
- p1054 简单背包问题的递归解法
- matplotlib学习之设置线条颜色、形状
- 怎么应用vertical-align,才能生效?
- bzoj 1532: [POI2005]Kos-Dicing (二分+最大流)