博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3180 The cow Prom Tarjan基础题
阅读量:5225 次
发布时间:2019-06-14

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

题目用google翻译实在看不懂

其实题目意思如下

给一个有向图,求点个数大于1的强联通分量个数

1 #include
2 #include
3 #include
4 #include
5 #include
6 #define M 50010 7 #define N 10010 8 using namespace std; 9 int n,m,u,v,head[N],cnt=1,ans,sz[N],belong[N],dfn[N],low[N],indx,tar;10 bool inst[N];11 stack
st;12 struct edge13 {14 int u,v;15 }e[M];16 void add(int u,int v)17 {18 e[cnt].v=v;19 e[cnt].u=head[u];20 head[u]=cnt++;21 }22 void dfs(int u)23 {24 dfn[u]=low[u]=++indx;25 inst[u]=1;26 st.push(u);27 for (int i=head[u];i;i=e[i].u)28 {29 int v=e[i].v;30 if(!dfn[v])31 {32 dfs(v);33 low[u]=min(low[u],low[v]);34 }35 else36 if (inst[v])37 low[u]=min(low[u],dfn[v]);38 }39 if (dfn[u]==low[u])40 {41 tar++;42 while (1)43 {44 int t=st.top();45 st.pop(),inst[t]=0;46 sz[tar]++;47 belong[t]=tar;48 if (t==u)49 break;50 }51 }}52 int main()53 {54 scanf("%d%d",&n,&m);55 for (int i=1;i<=m;i++)56 {57 scanf("%d%d",&u,&v);58 add(u,v);59 }60 for (int i=1;i<=n;i++)61 if (dfn[i]==0) dfs(i);62 for (int i=1;i<=tar;i++)63 ans+=sz[i]>1;64 printf("%d",ans);65 return 0;66 }

 

转载于:https://www.cnblogs.com/mrsheep/p/7840514.html

你可能感兴趣的文章
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
js += 含义(小知识)
查看>>
B2321 [BeiJing2011集训]星器 数学&&物理
查看>>
201571030319 四则运算
查看>>
RestTemplate 调用本地服务 connection refused
查看>>
.NET方向高级开发人员面试时应该事先考虑的问题
查看>>
台达PLC modbus 不支持04功能码
查看>>
发布一个JavaScript工具类库jutil,欢迎使用,欢迎补充,欢迎挑错!
查看>>
discuz 常用脚本格式化数据
查看>>
MS CRM 2011 创建基于Fetch的报表 -- 进阶版
查看>>