受欢迎的牛(强连通分量)
发布日期:2021-06-27 21:40:33
浏览次数:3
分类:技术文章
本文共 1115 字,大约阅读时间需要 3 分钟。
受欢迎的牛
解题思路
先缩点成一个有向无环图
如果只有一个出度为0的点 那么这个新图中出度为0的点所代表的牛都是明星 输出该强连通分量中的点数 否则没有牛成为明星 输出0AC代码
#include#include using namespace std;int n,m,ok,top,tot,ans,T,TT,du[50005],low[50005],col[50005],dfn[50005],sum[50005],stak[50005],head[50005];struct node{ int to,next;}a[50005];void add(int x,int y)//建边{ a[++tot]=(node){ y,head[x]}; head[x]=tot;}void Tarjan(int x)//求强连通分量缩点{ dfn[x]=low[x]=++T; stak[++top]=x; for(int i=head[x];i;i=a[i].next) { int v=a[i].to; if(!dfn[v]) { Tarjan(v); low[x]=min(low[x],low[v]); } else if(!col[v])low[x]=min(low[x],low[v]); } if(dfn[x]==low[x]) { col[x]=++TT; sum[TT]=1; while(stak[top]!=x) sum[TT]++,col[stak[top--]]=TT; top--; } return;}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int x,y; 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=a[j].next)//枚举 { int v=a[j].to; if(col[i]!=col[v])du[col[i]]++; } for(int i=1;i<=TT;i++) if(!du[i])ans=sum[i],ok++; if(ok!=1)printf("0"); else printf("%d",ans); return 0;}
谢谢
转载地址:https://blog.csdn.net/weixin_45524309/article/details/117474081 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月16日 06时40分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
理解String.intern()和String类常量池疑难解析例子
2019-04-26
python flask打造前后端分离的口罩检测
2019-04-26
【大话Mysql面试】-MySQL基础知识
2019-04-26
【大话Mysql面试】-MySQL数据类型有哪些
2019-04-26
【大话Mysql面试】-MySQL数据引擎
2019-04-26
【大话Mysql面试】-常见SQL语句书写
2019-04-26
【大话Mysql面试】-SQL语句优化
2019-04-26
【大话Mysql面试】-Mysql锁
2019-04-26
【大话Mysql面试】-Mysql常见面试题目
2019-04-26
【物联网实训项目】------(二)家庭智慧安防系统之定时监控
2019-04-26
【物联网实训项目】------(三)家庭智慧安防系统之实时监控
2019-04-26
【物联网实训项目】------(四)家庭智慧安防系统之智能温控
2019-04-26
【物联网实训项目】------(五)家庭智慧安防系统之智能监控
2019-04-26
【物联网实训项目】------(六)家庭智慧安防系统之智能监控
2019-04-26
【物联网实训项目】------(七)家庭智慧安防系统之人脸验证
2019-04-26
日常琐事(一)
2019-04-26
数据结构----绪论
2019-04-26
篇章二线性表---常见操作
2019-04-26