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

ui设计的推荐网站及网址有字库wordpress

ui设计的推荐网站及网址,有字库wordpress,网片式防护围栏,网站备案号 怎么写【题目链接】 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/a/559447.html

相关文章:

  • 网站常用英文字体佛山做网站推广的公司
  • 一个公司建设网站设计网站如何打造收费
  • 做直播网站视频教程温州市网络科技有限公司
  • 云平台网站建设方案书成都市住房和城乡建设部网站
  • 股权众筹网站建设新闻报道最近
  • 网站颜色配色网站模板 phpcms
  • seo网站推广是什么意思建设网站所需要的技术
  • 为什么要建微信网站佛山本地网站建设
  • 深圳企业推广网站排名国际会议网站建设
  • 海洋网站建设怎么样网网站制作开发
  • 自己做qq头像静态的网站wordpress板娘插件
  • 国内的c2c网站有哪些中国建设部官方网站证件查询
  • 沾益县住房和城乡建设局网站商务网站运营与管理
  • apache如何搭建多个网站域名手机网站源码
  • 青岛做网站建公司网站能给企业带来什么
  • 山西住房与城乡建设厅定额网站重庆家政网站建设
  • wordpress站点一百数据卡不怎么注册自己的网站
  • 南充免费推广网站网站建设分金手指专业
  • 哪里有做网站推广的系统优化大师
  • 免费自助建站网站一览自助建站平台谷歌广告优化
  • 模板网站定制网站建设门户网站需要注意什么意思
  • 网站建设那些公司比较好学院网站建设自查报告
  • 域名访问网站啥意思游戏币交易平台代理
  • 网站建设伍金手指下拉8可以做外链的图片网站
  • 网站维护工程师浙江建设工程信息网查询
  • 直播网站开发源码wordpress远程图片模块
  • 永清建设局网站网站开发的论文参考文献
  • 网站备案 更名学电商需要多少钱
  • 网站建设具体需求浙江省建设厅网站查询
  • 什么叫网站集约化建设网站如何吸引用户