洛谷P2341 受欢迎的牛
来源:互联网 发布:石材行业做效果图软件 编辑:程序博客网 时间:2024/06/03 16:04
题目链接:https://www.luogu.org/problem/show?pid=2341
解题思路:
1.首先可以想到在一个联通块内的牛都可以成为明星奶牛(互相喜欢)。这样我们就可以把它们缩成一个点。
2.对于已经缩点完毕的图来说,如果有且仅有一个点出度为0,说明它受所有牛喜欢,输出这个联通块内的点的个数。如果存在两个及以上的点出度为0,说明不可能有明星牛了,输出0.
注意:不要忘了区分局部变量与循环变量
#include<iostream>#include<cstdio>#include<stack>#define maxn 10005using namespace std;stack<int>st;int num,x,y,n,m,s,ans,maxx;int head[maxn],dfn[maxn],low[maxn],tot,cnt[maxn],son[maxn];int out[maxn],v[maxn];struct node{ int from,to;}list[maxn*5];void add(int x,int y){ list[++s].from=head[x]; list[s].to=y; head[x]=s;}void tarjan(int x){ dfn[x]=low[x]=++num; v[x]=1;st.push(x); int y; for (int i=head[x];i;i=list[i].from) if (!dfn[y=list[i].to]) tarjan(y),low[x]=min(low[x],low[y]); else if (v[y]) low[x]=min(low[x],dfn[y]); if (dfn[x]==low[x]){ tot++; int k=-1; while(k!=x){ k=st.top();st.pop(); v[k]=0; cnt[k]=tot; son[tot]++; } }}int main(){ cin>>n>>m; for (int i=1;i<=m;i++){ scanf("%d%d",&x,&y); add(x,y); } for (int i=1;i<=n;i++) if (!dfn[i]) tarjan(i); for (int i=1;i<=n;i++) for (int j=head[i];j;j=list[j].from) if (cnt[list[j].to]!=cnt[i]) out[cnt[i]]++; for (int i=1;i<=tot;i++) if (out[i]==0) ans++,maxx=son[i]; if (ans==1) cout<<maxx; else cout<<0; return 0;}
阅读全文
0 0
- 洛谷P2341 受欢迎的牛
- P2341 受欢迎的牛
- [P2341]受欢迎的牛
- 洛谷 P2341 [HAOI2006]受欢迎的牛
- 洛谷 P2341 [HAOI2006]受欢迎的牛
- 洛谷 P2341 [HAOI2006]受欢迎的牛
- 【洛谷 P2341】[HAOI2006]受欢迎的牛
- BZOJ1051(洛谷P2341) [HAOI2006]受欢迎的牛
- 洛谷 2341 受欢迎的牛
- 【洛谷 2341】 [HAOI2006]受欢迎的牛
- 【洛谷 2341】[HAOI2006]受欢迎的牛
- HAOI2006 受欢迎的牛
- BZOJ1051受欢迎的牛
- [HAOI2006]受欢迎的牛
- 受欢迎的牛
- [HAOI2006]受欢迎的牛
- [HAOI2006]受欢迎的牛
- 受欢迎的牛
- 初识nodejs14
- 最陌生的老朋友Softmax Loss
- js BOM
- 热分析之路-MRF模拟轴流风机
- android控件之EditText
- 洛谷P2341 受欢迎的牛
- jquery的$.extend和$.fn.extend区别
- Java设计模式:单例模式(Singleton Pattern)
- URL中“#” “?” &“”号的作用
- Unity导出Xcode工程 在模拟器上调试
- QT creator同时打开多个运行窗口(客户端窗口)
- 1.12. Multiclass and multilabel algorithms 多分类多标签算法
- 【Vue】详解Vue生命周期
- 61. Rotate List