博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Poj 2186 Popular Cows(Tarjan 强连通缩点)
阅读量:6868 次
发布时间:2019-06-26

本文共 1542 字,大约阅读时间需要 5 分钟。

传送门:

题意:给你n头牛,m种关系,A牛认为B牛是popular的,B牛认为C牛是popular的,则A也认为C是popular的,问最终有几头被所有牛认为是popular的牛

题解:强连通缩点基础题(虽然我Tarjan和缩点都是对的,但是最终讨论判断的时候写垮了(写了3天。。。。还不是你懒!!!!过年划水这么多天缩点后找出度为零的点个数。然后讨论是否有这样子的点,如果没有则全都是(整个都是强连通图),如果只有一个,那么那个强连通分量所含的牛的个数就是所求解,如果有多个那么都是不是。

#include
#include
using namespace std;const int N =1e4+5;int head[N];int nx[N*N];int to[N*N];int tot=1;int vis[N];int comNum;int comMap[N];int Stack[N];int Stacksize;int n,m;int dfn[N],low[N];int indegree[N],outdegree[N];int Map[N];void make_list(int u,int v){ to[tot]=v; nx[tot]=head[u]; head[u]=tot++;}void dfs(int u,int step){ dfn[u]=low[u]=step; vis[u]=1; Stack[++Stacksize]=u; for(int i=head[u];i;i=nx[i]){ int v=to[i]; if(vis[v]==0)dfs(v,step+1); if(vis[v]==1)low[u]=min(low[u],low[v]); } if(dfn[u]==low[u]){ comNum++; int sum=0; int k; do{ sum++; k=Stack[Stacksize--]; comMap[k]=comNum; vis[k]=2; }while(k!=u); Map[comNum]=sum; }}void tarjan(){ for(int i=1;i<=n;i++){ if(!vis[i])dfs(i,1); }}int main(){ while(~scanf("%d %d",&n,&m)){ memset(head,0,sizeof(head)); memset(indegree,0,sizeof(indegree)); memset(outdegree,0,sizeof(outdegree)); comNum=Stacksize=0; memset(Map,0,sizeof(Map)); memset(vis,0,sizeof(vis)); for(int i=0;i
1)ans=0; printf("%d\n",ans); } return 0;}

 

转载于:https://www.cnblogs.com/Mrleon/p/8452280.html

你可能感兴趣的文章
前端小随笔
查看>>
view属性大全
查看>>
Java文件编码示例
查看>>
CactiFans V1.0中文版发布
查看>>
HTML如何显示小于号“<”等特殊符号?
查看>>
别伤了虚拟桌面管理员的"心"
查看>>
Windows系统使用IntelliJ IDEA 搭建Hadoop的开发调试环境(一)
查看>>
yum安装lamp
查看>>
Web.Config文件中数据库连接配置
查看>>
[Unity 3D] Unity 3D 性能优化 (一)
查看>>
spring Quartz定时任务调度 时间设置
查看>>
SymmetricDS: 数据库数据同步Database synchronization
查看>>
Disabling OOM killer on Ubuntu 14.04
查看>>
VBS备份脚本
查看>>
CentOS 6.5 自动安装镜像
查看>>
Storm与Spark Streaming比较
查看>>
我的友情链接
查看>>
Exchange Server 运维管理01:Exchange中Active Directory 有什么用?
查看>>
dhcp服务在企业中的应用
查看>>
linux系统管理之四:服务状态
查看>>