当前位置: 首页 > news >正文

史先生 网站建设百度企业邮箱注册申请

史先生 网站建设,百度企业邮箱注册申请,西安 餐饮 网站建设,家具网站素材【题目链接】 ybt 1522:网络 OpenJudge 百练 1144:Network 【题目考点】 1. 图论:割点 【解题思路】 每个交换机是一个顶点,如果两地点之间有电话线连接,那么两顶点之间有一条无向边,该图是无向图。 初始时任何地…

【题目链接】

ybt 1522:网络
OpenJudge 百练 1144:Network

【题目考点】

1. 图论:割点

【解题思路】

每个交换机是一个顶点,如果两地点之间有电话线连接,那么两顶点之间有一条无向边,该图是无向图。
初始时任何地点之间都是可以通讯的,也就是说这是一个无向连通图。
如果一个交换机停止工作,导致其它一些地点不能通讯,这样的地点交灾区。那么也就是图中去掉该顶点后,有些顶点之间不再连通(没有路径),那么也就是整个图不再是连通图。这样的点就是割点。
灾区就是割点,统计灾区的数量就是统计割点的数量。
使用tarjan算法求出所有割点,将割点保存在一个set中,或用数组标记哪些顶点是割点,而后统计割点数量。

【题解代码】

解法1:Tarjan算法求割点,使用set保存割点
#include <bits/stdc++.h>
using namespace std;
#define N 105
int n, m;
vector<int> edge[N];//edge[i]:顶点i的邻接点 
int dfn[N], low[N], ts, root;
set<int> cutVer;
void tarjan(int u)
{int child = 0;dfn[u] = low[u] = ++ts;for(int v : edge[u]){if(dfn[v] == 0){tarjan(v);low[u] = min(low[u], low[v]);if(u == root && ++child > 1 || u != root && dfn[u] <= low[v])cutVer.insert(u);}elselow[u] = min(low[u], dfn[v]);} 
}
int main()
{int f, t;while(cin >> n && n != 0){ts = 0;//变量初始化 for(int i = 1; i <= n; ++i)edge[i].clear();memset(dfn, 0, sizeof(dfn));cutVer.clear();while(cin >> f && f != 0)while(cin.get() != '\n'){cin >> t;edge[f].push_back(t);edge[t].push_back(f);}for(int v = 1; v <= n; ++v) if(dfn[v] == 0)tarjan(root = v);cout << cutVer.size() << endl;}return 0;
}
解法2:Tarjan算法求割点,使用标记数组保存割点
#include <bits/stdc++.h>
using namespace std;
#define N 105
int n, dfn[N], low[N], ts, root, ct;
vector<int> edge[N];
bool cutVer[N];//cutVer[i]:i是否是割点
void tarjan(int u)
{int child = 0;dfn[u] = low[u] = ++ts;for(int v : edge[u]){if(dfn[v] == 0){tarjan(v);low[u] = min(low[u], low[v]);if(u == root && ++child > 1 || u != root && dfn[u] <= low[v])cutVer[u] = true;//u是割点 }elselow[u] = min(low[u], dfn[v]); }
} 
int main()
{int f, t;while(cin >> n && n != 0){ts = ct = 0;//变量初始化 for(int i = 1; i <= n; ++i)edge[i].clear();memset(cutVer, 0, sizeof(cutVer));memset(dfn, 0, sizeof(dfn));while(cin >> f && f != 0)while(cin.get() != '\n'){cin >> t;edge[f].push_back(t);edge[t].push_back(f);}for(int v = 1; v <= n; ++v) if(dfn[v] == 0)tarjan(root = v);for(int v = 1; v <= n; ++v) if(cutVer[v])//统计割点数量 ct++;cout << ct << endl;}return 0;
}
http://www.yayakq.cn/news/767875/

相关文章:

  • ps做网站框架搭建全网推广网站
  • 深圳app网站wordpress 相关插件
  • 医院网站建设报价wordpress背景板
  • 加入网站帮忙做网站全屋定制十大品牌排行榜
  • 绿色郑州网站中国新闻社是什么级别
  • 文库网站开发教程网站二级目录 修改路径
  • 网站前台如何刷新西安网站建设sd2w
  • 网站敏感字淘宝上 网站建设
  • php婚庆网站源码电商小程序多少钱
  • 网站建设基本步骤顺序wordpress首页导航设置
  • 网络检修seo内链优化
  • wordpress做微商城搜索引擎优化seo培训
  • 如何做seo整站优化wordpress后台登录路径
  • 虚拟邮箱注册网站wordpress google提交
  • 龙华学校网站建设推广自己的产品
  • 西安建站之家网络科技有限公司注册网站引流
  • 网站百度百科中国建设银行个人网上登录入口
  • 南宁市网站维护与推广公司沂水做网站
  • 做网站价格报价费用多少钱网站给部分文字做遮挡代码
  • 学校网站建设的风险分析企业邮箱网易登录入口
  • app怎么推广郑州seo怎么做
  • 东莞企业网站设计专业服务北京冬奥会网页设计
  • 展示型网站有哪些内容百度指数人群画像
  • 扬州市住房建设局网站做一个app需要多少费用
  • 清廉医院建设网站免费看国际短视频软件
  • 网站建设选哪个公司海外商城网站建设
  • 餐饮设计网站吉林公司做网站
  • 建设网站费怎么入账数码网站名
  • 哈尔滨模板建站定制网站后端开发工程师
  • 泰州品牌网站建设wordpress插表格