博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSP 高速公路 强连通分量 tarjan
阅读量:4216 次
发布时间:2019-05-26

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

 

题目:

思路:

 

#include
#include
#include
#include
#define MAXN 10000+5#define MAXM 100000+5#include
using namespace std; bool in_stack[MAXN];bool vis[MAXN];int low[MAXN];int dfn[MAXN];stack
s;int cur_time,color;int col_num[MAXN];int n,m;vector
adj[MAXN];int tarjan(int cur) { dfn[cur] = low[cur] = ++cur_time; s.push(cur); in_stack[cur] = true; vis[cur] = true; for(int i = 0; i < adj[cur].size(); ++i){ int v = adj[cur][i]; if(!vis[v]){ tarjan(v); low[cur] = min(low[v],low[cur]); } else if(in_stack[v]){ low[cur] = min(low[cur],dfn[v]); } } if(dfn[cur] == low[cur]){ ++color; int v; do{ v = s.top(); s.pop(); in_stack[v] = false; ++col_num[color]; }while(v != cur); } }int main() { scanf("%d%d",&n,&m); memset(vis,false,sizeof(vis)); memset(in_stack,false,sizeof(in_stack)); for(int i = 0; i < m; ++i){ int f,t; scanf("%d%d",&f,&t); adj[f].push_back(t); } cur_time = 0; color = 0; for(int i = 1; i <= n; ++i){ if(!vis[i]){ tarjan(i); } } int ans = 0; for(int i = 1; i <= color; ++i){ if(col_num[i] > 1){ int x = col_num[i]; ans += (x*(x-1)/2); } } printf("%d\n",ans); return 0; }

 

转载地址:http://bqimi.baihongyu.com/

你可能感兴趣的文章
FreeRTOS学习笔记——FreeRTOS任务挂起和恢复实验
查看>>
人工智能学习笔记——案例实战信用卡欺诈检测(逻辑回归)
查看>>
FreeRTOS学习笔记——FreeRTOS 列表和列表项
查看>>
FreeRTOS学习笔记——任务壮态或信息查询与任务运行时间统计
查看>>
FreeRTOS学习笔记——FreeRTOS 系统内核控制函数
查看>>
FreeRTOS学习笔记——FreeRTOS 时间管理
查看>>
STemWin学习笔记——STemWin无操作系统移植
查看>>
STemWin学习笔记——在PC上仿真STemWin
查看>>
LwIP学习笔记——LwIP无操作系统移植
查看>>
LwIP学习笔记——RAW编程接口UDP实验
查看>>
STemWin学习笔记——文本显示
查看>>
STemWin学习笔记——数值显示
查看>>
STemWin学习笔记——2D绘图
查看>>
STemWin学习笔记——显示位图
查看>>
STemWin学习笔记——存储设备
查看>>
基于MATLAB/Simulink的电力电子电路仿真技术——Simulink仿真环境与模型库
查看>>
基于MATLAB/Simulink的电力电子电路仿真技术——Simulink仿真实践基础
查看>>
基于MATLAB/Simulink的电力电子电路仿真技术——子系统及模块封装技术
查看>>
基于MATLAB/Simulink的电力电子电路仿真技术——Simulink与MATLAB的接口设计
查看>>
基于MATLAB/Simulink的电力电子电路仿真技术——S函数的编写及其应用
查看>>