分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

UVA 315 :Network (无向图求割顶)

发布时间:2023-09-06 01:12责任编辑:沈小雨关键词:暂无标签

题目链接

题意:求所给无向图中一共有多少个割顶

用的lrj训练指南P314的模板

#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N=109;struct Edge{ ???int to,next; ???Edge(){} ???Edge(int _to,int _next) ???{ ???????to=_to; ???????next=_next; ???}}edge[N*N*2];int head[N];int dfn[N],low[N];int iscut[N];int n,tot;int time_tag;void addedge(int u,int v){ ???edge[tot]=Edge(v,head[u]); ???head[u]=tot++;}void init(){ ???memset(dfn,0,sizeof(dfn)); ???memset(iscut,0,sizeof(iscut)); ???memset(head,-1,sizeof(head)); ???tot=time_tag=0;}void dfs(int u,int pre){ ???low[u]=dfn[u]=++time_tag; ???int child=0; ???//子节点数目 ????for(int i=head[u];~i;i=edge[i].next) ???{ ???????int v=edge[i].to; ???????if(!dfn[v]) ???// ???把dfn[]当vis[]使用 ????????{ ???????????child++; ???????????dfs(v,u); ???????????low[u]=min(low[u],low[v]); ???????????if(low[v]>=dfn[u]) ???????????????iscut[u]=1; ???????} ???????else if(dfn[v]<dfn[u] && v!=pre) ???????????low[u]=min(low[u],dfn[v]); ???} ???if(pre<0&&child==1) iscut[u]=0; ???//只有一个孩子的根节点 }int main(){ ???while(scanf("%d",&n)>0&&n) ???{ ???????init(); ???????int u,v; ???????while(scanf("%d",&u)>0&&u) ???????{ ???????????while(getchar()!=‘\n‘) ???????????{ ???????????????scanf("%d",&v); ???????????????addedge(u,v); ???????????????addedge(v,u); ???????????} ???????} ???????dfs(1,-1); ???????int ans=0; ???????for(int i=1;i<=n;i++) ???????????if(iscut[i]) ans++; ???????printf("%d\n",ans); ???}}

UVA 315 :Network (无向图求割顶)

原文地址:http://www.cnblogs.com/Just--Do--It/p/7569112.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved