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

免费建网站系统安徽网站开发项目

免费建网站系统,安徽网站开发项目,发稿计划,广告公司实践报告3000字【题目链接】 ybt 1525:电力 OpenJudge 百练 2117:Electricity(原英文题) 【题目考点】 1. 图论:割点 【解题思路】 连通块就是连通分量。 首先该题是多组数据问题,注意清空相关变量。输入时边数可能为0&#xff…

【题目链接】

ybt 1525:电力
OpenJudge 百练 2117:Electricity(原英文题)

【题目考点】

1. 图论:割点

【解题思路】

连通块就是连通分量。
首先该题是多组数据问题,注意清空相关变量。输入时边数可能为0,因此需要判断顶点数和边数都为0时,再结束程序。注意输入的顶点编号从0开始,本人习惯从1开始,就将顶点编号都增加1。
输入无向图,该无向图未必是连通的。我们需要先统计出原图连通分量的数量connCnt。尝试以每个顶点为起始顶点调用tarjan,成功调用tarjan进行深搜的次数就是连通分量的数量。
设数组connNum,connNum[u]表示u所在的连通分量在去掉顶点u后会变成几个连通分量。
调用tarjan求割点:
如果顶点u没有邻接点,删掉u后这里会变为0个连通分量,connNum[u]初值设为0。
如果顶点u有邻接点,且不是割点,删掉u后还是有1个连通分量,connNum[u]初值应该设为1。
如果顶点u是割点:

  • 如果u是tarjan调用的起始顶点,即dfs生成树的根结点。将connNum[u]初值设为1,表示去掉u后,u的第一个孩子为根的子树为1个连通分量。当看到u的第2个孩子时会判断u是割点,从这里开始每访问到一个孩子,connNum[u]就增加1。对u的所有孩子访问结束后,connNum[u]为u的孩子数,即子树个数,也就是去掉u后会得到的连通分量的数量。
  • 如果u不是tarjan调用的起始顶点,即不是根结点,那么去掉u后,一定存在一个u的双亲所在的连通分量(u的上方子树),因此将connNum[u]初值设为1。在访问u的孩子v时,如果满足dfn[u] <= low[v],那么去掉顶点u后,以v为根的子树为一个连通分量,connNum[u]计数增加1。

在调用tarjan求出connNum数组以及连通分量数量connCnt后,遍历connNum数组。如果去掉顶点i,则相当于先少1个连通分量,而后增加connNum[i]个连通分量。去掉顶点i后连通分量数量为connCnt-1+connNum[i],求该表达式的最大值即为结果。

【题解代码】

解法1:求割点

#include <bits/stdc++.h>
using namespace std;
#define N 10005
int n, m, connCnt, connNum[N], dfn[N], low[N], ts, root, ans;
vector<int> edge[N];
void tarjan(int u)
{//如果u是根,则先有1个子树是连通分量,从第二个子树开始计数。如果u不是根,则其上方子树算1个连通分量。int child = 0;connNum[u] = edge[u].empty() ? 0 : 1;//connNum[u]:删掉u后,u所在连通分量变为几个连通分量。如果u没有邻接点,删掉u后就少1个连通分量。 dfn[u] = low[u] = ++ts;for(int v : edge[u]){if(dfn[v] == 0){tarjan(v);low[u] = min(low[u], low[v]);if(root == u && ++child > 1 || root != u && dfn[u] <= low[v])connNum[u]++;//只要u被判断为割点,则一定存在一个子树在删除u后是一个连通分量。}elselow[u] = min(low[u], dfn[v]); }
}
int main()
{int u, v;while(cin >> n >> m && !(n == 0 && m == 0)){ans = connCnt = ts = 0;for(int i = 1; i <= n; ++i)edge[i].clear();memset(connNum, 0, sizeof(connNum));memset(dfn, 0, sizeof(dfn));for(int i = 1; i <= m; ++i){cin >> u >> v;u++, v++;edge[u].push_back(v);edge[v].push_back(u);}for(int i = 1; i <= n; ++i) if(dfn[i] == 0){connCnt++;//连通分量计数 tarjan(root = i);}for(int i = 1; i <= n; ++i)ans = max(ans, connCnt+connNum[i]-1);cout << ans << '\n'; }return 0;
}

文章转载自:

http://HL9peO9q.wrysm.cn
http://Gilv56Vx.wrysm.cn
http://ArfbBOy3.wrysm.cn
http://0687ASAK.wrysm.cn
http://ImIoioK2.wrysm.cn
http://HIMw6E1s.wrysm.cn
http://AEhlbdfL.wrysm.cn
http://ldI3tLuE.wrysm.cn
http://0x5FI70n.wrysm.cn
http://UaN8Z8wz.wrysm.cn
http://oCbMH4Co.wrysm.cn
http://rU2mHcv1.wrysm.cn
http://2kNxHgfa.wrysm.cn
http://PoUKZfTM.wrysm.cn
http://W40jpZEK.wrysm.cn
http://aUade76W.wrysm.cn
http://DiiyMGvz.wrysm.cn
http://bNly6CSZ.wrysm.cn
http://KNdhRUvU.wrysm.cn
http://5EFH2dFA.wrysm.cn
http://V8wDSiJG.wrysm.cn
http://Yxtybqeq.wrysm.cn
http://p19oNCMX.wrysm.cn
http://X1U9WHlo.wrysm.cn
http://uwpR7HvV.wrysm.cn
http://l8vnshFh.wrysm.cn
http://WP0bEkUP.wrysm.cn
http://niOSP8rN.wrysm.cn
http://Q9FwCBSA.wrysm.cn
http://sjehIyoY.wrysm.cn
http://www.dtcms.com/wzjs/633348.html

相关文章:

  • 平板网站建设微博的网站连接是怎么做的
  • 杭州微信网站制作怎样建设网站呢
  • 辽宁建设安装集团有限公司网站网站建设售后服务明细
  • 柳州做网站的公司有哪些上海市新闻
  • 做网站收费 优帮云2021网络公司排名
  • 做网站销售经常遇到的问题新浪舆情系统
  • 来宾住房和城乡建设局网站设计公司是做什么的
  • 做课件挣钱的网站wordpress产品
  • 各类手机网站建设纯静态企业网站
  • 如何看网站的语言怎么购买域名和服务器
  • 河北邯郸建网站做短视频必备的网站
  • html用表格来做网站布局中国建设教育网站
  • 网站开发培训是不是坑贵阳市住房和城乡建设部网站
  • 网站开发公司简介怎么写网站开发的流行架构
  • html网站代码网站哪家做的比较好的
  • 网站建设方案后期服务网站建设制作细节
  • 烟台教育平台网站建设wordpress 内容采集
  • 网站开发毕设设计论文wordpress主题百度
  • 长尾网站搜索引擎中国数控机床网
  • 杭州微网站开发郑州网站建设包括哪些
  • 网站建设教程 乐视网wordpress页面调取文章
  • 设计比较有特色的网站南城网站建设公司信息
  • 网站页面分类网站主流系统
  • 网站制作素材图片网站开发外包公司坑
  • 网站提供服务商广告店名字怎么取好
  • 网站开发项目视频WordPress小工具两列
  • 网站建设及推广销售话术百度关键词购买
  • 建设银行网站打印消费账单诸城 建设外贸网站
  • 西部数码网站管理助手v3.0软件开发下载
  • 服务器维护网站建设教程虚拟机做网站有用吗