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

做渔具最大的外贸网站qq群排名优化软件

做渔具最大的外贸网站,qq群排名优化软件,自己做烘焙的网站,做网站专业公司题目大意:给一张$n(n\leqslant2\times10^5)$个点$m(m\leqslant2\times10^5)$条边的无向带权图,定义一次操作为把一条边边权加一,求要使最小生成树唯一的最少操作数。 题解:先求一个最小生成树,对于任意一条不在最小生成…

题目大意:给一张$n(n\leqslant2\times10^5)$个点$m(m\leqslant2\times10^5)$条边的无向带权图,定义一次操作为把一条边边权加一,求要使最小生成树唯一的最少操作数。

题解:先求一个最小生成树,对于任意一条不在最小生成树上的边,只有当它连上后形成的环上有和它边权相同的边时,最小生成树才是不唯一的,这是就要把这条边边权加一,并且,相同的那一条边一定是这个环上边权最大的边。所以可以用树上倍增求这条边,然后比较一下就行了。

卡点:树上倍增多处写错

 

C++ Code:

#include <algorithm>
#include <cstdio>
#define maxn 200010int head[maxn], cnt;
struct Edge {int to, nxt, w;inline bool operator < (const Edge &rhs) const {return w < rhs.w;}
} e[maxn << 1], E[maxn];
inline void addedge(int a, int b, int c) {e[++cnt] = (Edge) { b, head[a], c }; head[a] = cnt;e[++cnt] = (Edge) { a, head[b], c }; head[b] = cnt;
}int n, m;
int f[maxn];
int find(int x) { return x == f[x] ? x : (f[x] = find(f[x])); }
bool used[maxn];#define M 17
int fa[maxn][M + 1], Mx[maxn][M + 1], dep[maxn];
void dfs(int u) {for (int i = 1; i <= M; ++i) {fa[u][i] = fa[fa[u][i - 1]][i - 1];Mx[u][i] = std::max(Mx[u][i - 1], Mx[fa[u][i - 1]][i - 1]);}for (int i = head[u]; i; i = e[i].nxt) {int v = e[i].to;if (v != *fa[u]) {*fa[v] = u;*Mx[v] = e[i].w;dep[v] = dep[u] + 1;dfs(v);}}
}
#define chkmin(x, i) res = std::max(res, Mx[x][i]), x = fa[x][i]
inline int calc(int x, int y) {int res = 0;if (dep[x] < dep[y]) std::swap(x, y);for (int i = dep[x] - dep[y]; i; i &= i - 1) chkmin(x, __builtin_ctz(i));if (x == y) return res;for (int i = M; ~i; --i) if (fa[x][i] != fa[y][i]) chkmin(x, i), chkmin(y, i);return std::max(res, std::max(*Mx[x], *Mx[y]));
}int main() {scanf("%d%d", &n, &m);for (int i = 0; i < m; ++i) scanf("%d%d%d", &E[i].to, &E[i].nxt, &E[i].w);std::sort(E, E + m);for (int i = 1; i <= n; ++i) f[i] = i;{int num = n - 1;for (int i = 0; i < m && num; ++i) {int u = E[i].to, v = E[i].nxt, x = find(u), y = find(v);if (x != y) {f[x] = y;--num;used[i] = true;addedge(u, v, E[i].w);}}}dfs(1);int ans = 0;for (int i = 0; i < m; ++i) if (!used[i]) ans += E[i].w == calc(E[i].to, E[i].nxt);printf("%d\n", ans);return 0;
}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10335626.html

http://www.lbrq.cn/news/2752201.html

相关文章:

  • 做网站后期费用百度站长平台论坛
  • 花生壳做的网站十大免费cms建站系统介绍
  • 做网站的工作叫什么网络推广与推广
  • 如何做小程序平台网络seo排名
  • 网站建设业务员提成重大军事新闻最新消息
  • 李沧网站建设电话重庆森林台词
  • 培训类 网站后台在线建站平台
  • 企业注册好了怎么做网站代码编程教学入门
  • 做网站怎么拿框架的原代码网络营销工程师前景
  • 用来做收录的网站百度推广app下载
  • 广州疫情源头已查明事件整站优化seo平台
  • wordpress站外链接页面长沙网站优化方法
  • 做网站开发钱中国移动有免费的视频app
  • 做一个交友网站怎样做需要多少资金快速提高排名
  • 做网站要学那些最近新闻有哪些
  • 站长工具ping杭州seo工作室
  • wordpress实现双语宁波关键词优化平台
  • 阿里云简单网站建设北京网络优化
  • 搭建网站一条龙网站seo关键词优化
  • cpa单页网站怎么做如何推广网站链接
  • 知名b2b平台网站推广seo优化
  • 网站一般做多大像素如何推广一个平台
  • 广告设计公司核心优势宁波seo公司排名榜
  • discuz建网站优化大师app下载
  • 手机网站常用代码河南新闻头条最新消息
  • 如何选择百度网站优化公司网络营销内容
  • 网站建设公司网站建设公司怎么建免费网站
  • 怎么样做美术招生信息网站西安网红
  • 深圳福田网站建设公司百度推广app下载安卓版
  • 自己做网站上市sem是什么电镜
  • 实变函数中集合E的边界与其补集的边界是否相等
  • C++ vector的使用
  • bash shell 入门
  • (一)React企业级后台(Axios/localstorage封装/动态侧边栏)
  • STM32标准库学习笔记
  • 机器学习核心概念精要:从定义到评估