tarjan无向图求割点,cpp板子
来源:互联网 发布:高收益网络理财平台 编辑:程序博客网 时间:2024/05/20 08:43
</pre><pre>
<pre name="code" class="cpp">/* index时间戳 dfn[u]即u的dfs序 low[v]为dfs时点v可回到的最小时间戳 点u为割点当且仅当u的子树中有任意一个节点v的low[v]>=dfn[u] 简而言之:儿子节点v不能不经过父亲节点u,到达祖先,如爷爷节点,root节点...,则:父亲节点u为一个割点 一个图可能有不止一个割点,这里我们考虑用flag数组记录 进行一次打印。*/
/*7 91 2 11 3 53 6 96 7 44 7 73 7 65 4 24 3 47 5 3::1 37 81 2 11 3 56 7 44 7 73 7 65 4 24 3 47 5 3::7 3 1*/
#include<cstdio>#include<algorithm>using namespace std;#define MAXN 10001#define MAXM 50001int n,m;struct node {int next;int to;int w;} E[MAXM];int head[MAXN],tot;void add(int u,int v,int w) {E[++tot].to=v,E[tot].w=w,E[tot].next=head[u],head[u]=tot;}int dfn[MAXN],low[MAXN],flag[MAXN],index,root;void tarjan(int u,int fa) {dfn[u]=low[u]=++index;int children=0;for(int i=head[u]; i; i=E[i].next) {int v=E[i].to;if(dfn[v]==0) {children++;tarjan(v,u),low[u]=min(low[u],low[v]);if(u!=root&&low[v]>=dfn[u])flag[u]=1;if(u==root&&children>1) flag[u]=1;}else if(v!=fa)low[u]=min(low[u],dfn[v]);}}int main() {scanf("%d%d",&n,&m);for(int i=1; i<=m; i++) {int u,v,w;scanf("%d%d%d",&u,&v,&w);add(u,v,w),add(v,u,w);}root=1;tarjan(1,root);for(int i=1;i<=n;i++)if(flag[i])printf("%d ",i);printf("\n");return 0;}
0 0
- tarjan无向图求割点,cpp板子
- poj1144Network 无向图求割点Tarjan
- POJ 1144 Network 无向图求割点Tarjan
- 无向图 tarjan 总结
- POJ 1523 SPF (无向图求割点 tarjan算法)
- *无向图求割点+点双连通分量——Tarjan
- ZOJ2588 无向图求割边 tarjan算法
- 模板,无向图强连通缩点,tarjan
- UVA315_Network _无向图割点::Tarjan
- Tarjan无向图最小权值割边
- 无向图和有向图的tarjan
- poj1236|poj3177 tarjan,强联通,有向/无向
- Tarjan求割点傻逼板子
- Tarjan求割点板子
- hdu 2586 tarjan 板子
- Tarjan算法板子
- luogu3388 tarjan求割点板子
- 无向连通图求割点(tarjan算法去掉改割点剩下的联通分量数目)
- 解决UltraEdit中文乱码
- Android之API 23动态获取权限完美解决
- 数据库事务隔离级别和锁实现机制
- Scheduler
- ---Filter ( 四 ) filter字符编码过滤器
- tarjan无向图求割点,cpp板子
- 单例模式的最高级形式
- Android 编程下设置 Activity 切换动画
- coredata学习总结(九)
- 杭电OJ 2032
- Tips for docker
- web和winform中读取config配置文件的方法
- 正则表达式常用表示
- sim808 gps 定位数据解析