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

信息服务平台优化的定义

信息服务平台,优化的定义,广州专业做网站公司有哪些,中信建设有限责任公司张晞【题目链接】 ybt 1526:Blockade 洛谷 P3469 [POI 2008] BLO-Blockade 【题目考点】 1. 图论:割点 【解题思路】 对于一个有n个顶点的无向连通图,问去掉每个顶点后,会有多少个有序点对(x, y),x与y不连通&#xff…

【题目链接】

ybt 1526:Blockade
洛谷 P3469 [POI 2008] BLO-Blockade

【题目考点】

1. 图论:割点

【解题思路】

对于一个有n个顶点的无向连通图,问去掉每个顶点后,会有多少个有序点对(x, y),x与y不连通,也就是x到y没有路径。
看有序点对,那么(x, y)与(y, x)就是两个不同的点对。
设此时删除与顶点i相连的边,那么考虑第一个顶点为i的点对(i, x),另一个顶点x可以是除顶点i以外的任意顶点,共有n-1种可能。那么第一个顶点为i的点对(i, x)有n-1个。

如果顶点i不是割点,那么去掉与顶点i相连的边后,其余各顶点互相连通,因此互不连通的点对只有第二个顶点为i的点对(x, i),第一个顶点有n-1种情况,这样的点对有n-1个。
如果顶点i是割点,那么去掉与顶点i相连的边后,将整个图分成了多个连通分量。
设某个连通分量的顶点数为c,其余顶点数为n-c。该连通分量中的每个顶点与连通分量外的每个顶点都是互不连通的,因此以该连通分量内顶点为第一个顶点的点对有 c ( n − c ) c(n-c) c(nc)个。
因此需要求出删除割点后形成的每个连通分量中的顶点数量。而后将每个连通分量中的顶点数量c乘以剩余顶点数n-c后加和 ∑ c ( n − c ) \sum c(n-c) c(nc),即可得到所有的不连通点对的数量。

考察求割点的tarjan算法,该算法为dfs算法,搜索的同时也在构建dfs生成树。
对于某割点u,若访问邻接点v时v没有被访问过,那么在dfs生成树中v是u的孩子,边(u,v)是树边。
在这里插入图片描述

  • 如果满足条件“u是根且有两个以上的孩子,或dfn[u] <= low[v]”,那么u是割点。去掉顶点u后,dfs生成树中以v为根的子树就是一个连通分量。
    siz[u]表示dfs生成树中以u为根的树的顶点数,根据树形动规,siz[u]初值设为1,每搜索完一个u的孩子v,将siz[u]加上以顶点v为根的子树的顶点数siz[v],即siz[u] += siz[v]
    当满足dfn[u] <= low[v]时,以v为根的子树的顶点数是siz[v],该连通分量中顶点作为第一个顶点,该连通分量外顶点作为第二个顶点构成的顶点的顶点对有siz[v]*(n-siz[v])个。
  • dfs生成树中u的双亲,记为f。dfs生成树中u的孩子v还有不满足割点条件dfn[u] <= low[v]的顶点,这样的顶点记为v’,满足dfn[u] > low[v'],dfs生成树中一定存在从顶点v’一定有到达u的祖先的回边。因此在删掉顶点u的所有相连边后,所有以v’为根的子树和u的上方子树(dfs生成树中除了以u为根的子树之外的树)是连通的,形成一个连通分量。
    对于所有满足dfn[u] <= low[v]的顶点v,统计siz[v]的加和,记为sizChild。
    u的上方子树所在连通分量的顶点数是总顶点数减去其他每个连通分量的顶点数,再减去1(顶点u),即n-sizeChild-1。
    该连通分量中顶点为第一个顶点,该连通分量外顶点为第二个顶点的顶点对的数量为(n-sizeChild-1)*(n-(n-sizeChild-1))=(n-sizeChild-1)*(sizeChild+1)
    如果u不是割点,那么sizeChild为0,上式的值为n-1,和“如果顶点u不是割点,第二个顶点为u”的顶点对数相同。因此不需要判断u是否为割点,直接加上上式的值即可。

将删除顶点u相连的边产生的所有的有序点对数量加到结果a[u]中。最后输出数组a中的每个数。

【题解代码】

解法1:求割点

#include <bits/stdc++.h>
using namespace std;
#define N 100005
int n, m, dfn[N], low[N], ts, root;
long long ans[N], siz[N];
bool cutVer[N];
vector<int> edge[N];
void tarjan(int u)
{int child = 0, sizChild = 0;siz[u] = 1;//siz[u]:dfs生成树中以u为根的子树的大小 dfn[u] = low[u] = ++ts;for(int v : edge[u]){if(dfn[v] == 0){tarjan(v);siz[u] += siz[v];low[u] = min(low[u], low[v]);if(u == root && ++child > 1 || u != root && dfn[u] <= low[v]){cutVer[u] = true;sizChild += siz[v];//sizChild:去掉割点u后,能单独成为一个连通分量的子树的大小加和 ans[u] += siz[v]*(n-siz[v]);}}elselow[u] = min(low[u], dfn[v]);}ans[u] += (long long)(n-sizChild-1)*(sizChild+1)+n-1;//n-1为第一个顶点为u的数对数量
}
int main()
{int a, b;cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> a >> b;edge[a].push_back(b);edge[b].push_back(a);}tarjan(root = 1);//连通图 只需要进行一遍tarjan for(int i = 1; i <= n; ++i)cout << ans[i] << '\n';return 0;
}
http://www.dtcms.com/wzjs/209331.html

相关文章:

  • 企业网站做速优化排名万象网店推广常用的方法
  • 怀化招标网站个人网页设计作品欣赏
  • 做新闻类网站百度店铺注册
  • 3d打印网站开发免费的app推广平台
  • 有没有做宠物的网站营销型网站建设题库
  • 网站交易平台怎么注册百度 人工客服
  • 可以做网页的软件吴忠seo
  • 建湖县住房和城乡建设局网站如何出售自己的域名
  • 网架公司招聘安装队伍搜索引擎优化时营销关键词
  • 专业网站开发哪家专业网站排名优化公司
  • 提供南昌网站建设公司seo百度关键字优化
  • 怎么往网站里做游戏培训机构不退费最有效方式
  • 北京做兼职从哪个网站好网络营销策略制定
  • 宁波公司建站模板seo都用在哪些网站
  • 沧州做网站多少钱seo教程优化
  • seo网站优化案例全能优化大师
  • 长沙营销网站建设搜索竞价
  • 网站改版的目的网页制作培训网站
  • 所有网站的名字大全百度seo网站优化
  • 河南网站建设工作室软件开发培训机构
  • 网站制作定制图百度网站搜索排名
  • 做网站的企业排名百度点击器找名风
  • 前台网站系统源码seo有哪些网站
  • 襄汾网站建设广告推广营销网站
  • 自己设计网站关键字排名优化公司
  • HTML和PHP怎么做网站杭州seo中心
  • 温州做网站 掌熊号什么推广方式能快速引流
  • 河北邯郸手机网站建设网络营销的基本方式有哪些
  • 淘宝官网登录入口seo网络推广是干嘛的
  • 网页设计与制作教程书电子版优化疫情防控 这些措施你应该知道