MST(最小生成树)上的确定性和存在性问题

题目1:

给定一个n个点m条边的连通图,保证没有自环和重边。对于每条边求出,在其他边权值不变的情况下,它能取的最大权值,使得这条边在连通图的所有最小生成树上。假如最大权值为无限大,则输出-1。

题解:

先求出图的一棵最小生成树:

对于不在树上的边(x,y), 它的权值只要小于树上x到y路径中任意一条边就可以代替这条边。

对于在树上的边(x,y),可以先预处理出所有两端在x到y路径上的不在树上的边的最小值。它的权值一定要小于最小值。

路径max和min都可以用倍增求。
时间复杂度O(nlogn)

#include<bits/stdc++.h> 
using namespace std;
const int N=2e5+5;
inline int read(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}  return x*f;
}
int n,m,cnt=0,head[N];
int vis[N],ans[N];
int fa[N],dep[N],id[N];
int f[N][20],maxn[N][20];
struct data{int x,y,dis,id;
}a[N];
struct Edge{int v,w,nxt,id;
}edge[N<<1];
void add_edge(int u,int v,int w,int id){edge[++cnt].v=v;edge[cnt].w=w;edge[cnt].id=id;edge[cnt].nxt=head[u];head[u]=cnt;
}
int find(int x){if(fa[x]==x) return fa[x];else return fa[x]=find(fa[x]);
}
bool cmp(data a,data b){return a.dis<b.dis;
}
void build(){sort(a+1,a+m+1,cmp);for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=m;i++){int x=a[i].x;int y=a[i].y;if(find(x)!=find(y)){fa[find(x)]=find(y);vis[a[i].id]=1;add_edge(x,y,a[i].dis,a[i].id);add_edge(y,x,a[i].dis,a[i].id);}}
}
void dfs(int u){for(int i=1;i<=18;i++){f[u][i]=f[f[u][i-1]][i-1];maxn[u][i]=max(maxn[u][i-1],maxn[f[u][i-1]][i-1]);}for(int i=head[u];i;i=edge[i].nxt){int v=edge[i].v;int w=edge[i].w;if(v==f[u][0]) continue;dep[v]=dep[u]+1;id[v]=edge[i].id;f[v][0]=u;maxn[v][0]=w;dfs(v);}
}
void solve(int x,int y,int dis){x=find(x);while(dep[x]>dep[y]){ans[id[x]]=min(ans[id[x]],dis-1);int k=find(f[x][0]);fa[x]=k;x=find(x);}//加入新的非树边,出现环,要把新出现的环缩成点
}
int get(int x,int y,int &lca){int ans=0;if(dep[x]<dep[y]) swap(x,y);for(int i=18;i>=0;i--)if(dep[f[x][i]]>=dep[y]){ans=max(ans,maxn[x][i]);x=f[x][i];}if(x==y){lca=x;return ans;}for(int i=18;i>=0;i--){if(f[x][i]!=f[y][i]){ans=max(ans,maxn[x][i]);ans=max(ans,maxn[y][i]);x=f[x][i],y=f[y][i];}}lca=f[x][0];return max(ans,max(maxn[x][0],maxn[y][0]));
}
int main(){n=read();m=read();for(int i=1;i<=m;i++){a[i].x=read();a[i].y=read();a[i].dis=read();ans[i]=2e9; a[i].id=i;}build();dfs(1);for(int i=1;i<=n;i++) fa[i]=i;for(int i=1;i<=m;i++){if(!vis[a[i].id]){int x=a[i].x,y=a[i].y,z;ans[a[i].id]=get(x,y,z)-1;solve(x,z,a[i].dis);solve(y,z,a[i].dis);}}for(int i=1;i<=m;i++){if(ans[i]==2e9) printf("-1 ");else printf("%d ",ans[i]);}
}

题目2:

题解:

题目的操作其实可以看成给一条边权值加一

(u[lab],v[lab])这条边会被算到最小生成树里面,只有在权值小于等于它的边加完后,u[lab]和v[lab]不在一个连通块内。
我们把权值小于等于l[lab]的图建出来,现在问题变成,你可以用l[lab]−l[i]+1的代价砍掉一些边使得u[lab]和v[lab]不连通,最小割就好了。

题目3:

给定一个有n个点,m条边的无向连通图,每条边有边权。 定义一次操作为:选择一条图中的边,并将其权值+1。

试求最小的操作次数,使得操作后的图的最小生成树是唯一的。

题解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客网 【每日一题】[SCOI2009]粉刷匠

链接&#xff1a; 题目描述 windy有 N 条木板需要被粉刷。 每条木板被分为 M 个格子。 每个格子要被刷成红色或蓝色。 windy每次粉刷&#xff0c;只能选择一条木板上一段连续的格子&#xff0c;然后涂上一种颜色。 每个格子最多只能被粉刷一次。 如果windy只能粉刷 T 次&#…

CF932E-Team Work【斯特林数,组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/CF932E 题目大意 给出n,kn,kn,k&#xff0c;求∑i1nC(n,i)∗ik\sum_{i1}^nC(n,i)*i^ki1∑n​C(n,i)∗ik 解题思路 上式子的话&#xff0c;大体是先拆开iki^kik变成∑i1n(ni)∑j0k{kj}(ij)j!\sum_{i1}^n\binom{n}{i}\sum_{j0…

【数学】异或

异或 题目大意 问你不小于nnn的数对(a,b)(a,b)(a,b)&#xff0c;有多少个满足gcd(a,b)a⊕bgcd(a,b)a \oplus bgcd(a,b)a⊕b 输入样例#1 12输出样例#1 8输入样例#2 123456输出样例#2 214394数据范围 测试点数据规模110210031000450005100006100000750000081000000950000…

分布式事务解决方案以及 .Net Core 下的实现(上)

数据一致性是构建业务系统需要考虑的重要问题 &#xff0c; 以往我们是依靠数据库来保证数据的一致性。但是在微服务架构以及分布式环境下实现数据一致性是一个很有挑战的的问题。最近在研究分布式事物&#xff0c;分布式的解决方案有很多解决方案&#xff0c;也让我在研究的同…

[AGC014D] Black and White Tree(树形DP,博弈)

每次找到所有叶子节点&#xff0c;把它们的父亲染白&#xff0c;自己染黑。这个时候染完的叶子节点及其父亲节点对树的其他部分已无影响 ,可以直接删掉。 那么只需要判断树的其他部分是否有先手必胜策略即可。用递归遍历。 边界条件&#xff1a;若树为单一节点先手必胜。 代…

【每日一题】5月7日题目精讲 「火」皇家烈焰

链接&#xff1a; 「火」皇家烈焰 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 帕秋莉掌握了一种火属性魔法 由于钟爱扫…

【最小生成树】灌水

灌水 题目大意 给你n个点&#xff0c;你可以在某个点建水库&#xff08;生产水&#xff09;&#xff0c;或从其他有水的点建水管送过来 现在问你让所有点都有水的最小代价是多少 输入样例 4 5 4 4 3 0 2 2 2 2 0 3 3 2 3 0 4 2 3 4 0输出样例 9样例解释 FarmerJohnFarmer …

P6257-[ICPC2019 WF]First of Her Name【AC自动机】

正题 题目链接:https://www.luogu.com.cn/problem/P6257 题目大意 给出一个字典树&#xff0c;kkk次询问求每个节点出发到根节点的路径有多少包含前缀sis_isi​。 解题思路 我们按照所有询问串的反串构造ACACAC自动机。 那么此时如果我们用一个串SSS上去跑匹配的话&#xf…

微软MVP张善友告诉你,微服务选型要注意这些地方

周六的下午&#xff0c;广州周大福金融中心的写字楼静悄悄的&#xff0c;53楼的实盈多功能会议室却异常火爆&#xff0c;热闹非凡。来自广州各大科技公司的技术小伙伴们齐聚一堂&#xff0c;他们都在期待着一个人&#xff0c;那就是——微软MVP张善友和他带来的 .NET Core 微服…

像鱼

链接&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 给你一个边长为 n 的用硬币摆成的实心三角形&#xff0c;请问把他倒过来最少需要多少步&#xff1f; 例子…

[ZJOI2005]午餐(贪心+dp)

首先若只有一个窗口&#xff0c;利用贪心&#xff0c;按吃饭时间从大到小排序即可 正确性证明&#xff1a; 定义 eat[i] 第i个人的吃饭时间&#xff0c;time[i] 第i个人的打饭时间 延长时间T[i]max(eat[i]- ∑ji1ntimej\sum\limits_{ji1}^ntime_jji1∑n​timej​ ,0) 最后…

【图论】【模板】静态仙人掌(luogu 5236)

【模板】静态仙人掌 题目大意 给你一个无向仙人掌图&#xff08;保证每条边至多出现在一个简单回路中的无向图&#xff09;&#xff0c;问你两个点之间的最短路距离 输入样例#1 9 10 2 1 2 1 1 4 1 3 4 1 2 3 1 3 7 1 7 8 2 7 9 2 1 5 3 1 6 4 5 6 1 1 9 5 7输出样例#1 5 …

Wannafly挑战赛24D-无限手套【dp,生成函数】

正题 题目链接:https://ac.nowcoder.com/acm/contest/186/D 题目大意 mmm个二元组(ai,bi)(a_i,b_i)(ai​,bi​)&#xff0c;对于一个序列xxx的贡献是∏i1n(aixi2bixi1)\prod_{i1}^n(a_ix_i^2b_ix_i1)i1∏n​(ai​xi2​bi​xi​1) qqq次询问给出nnn求在xi≥0x_i\geq 0xi​≥0且…

SCF: 简单配置门面

Simple Configuration Facade, 简写为 SCF。是 代码 和 外部配置 (properties文件, 环境变量&#xff0c;系统/命令行参数, yaml文件, 等等)之间的一层抽象. 命名上和另一个著名组件slf4j (Simple Logging Facade for Java)相似, 在配置领域的地位也和slf4j &#xff08;.NET可…

字符串(AC自动机(fail tree))

传送门 注意&#xff1a;注释中的那段代码是不能用的 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<queue> using namespace std; typedef long long ll; const int N2000010; struct Edge{int v,nxt;}ed…

武汉工程大学2020GPLT选拔赛(上)

比赛链接 A L1-1 I LOVE WIT 模拟&#xff0c;每个字母单独一行&#xff0c;前面的空格按规律输出。可以直接输出&#xff0c;也可以模拟过程 #include<bits/stdc.h> using namespace std; int main(){string s"I LOVE WIT";for(int i0;i<s.size();i){fo…

【矩阵乘法】【倍增】美食家(luogu 6772)

美食家 题目大意 给你一个有向图&#xff0c;边权为经过所需时间 每个点有一个点权&#xff0c;有些点还有有特殊的点权 当你到达一个点后&#xff0c;可以获得该点的点权&#xff08;重复经过可以重复获得&#xff0c;但不能停留&#xff09;&#xff0c;若在某个时间到某个…

.net core实践系列之短信服务-为什么选择.net core(开篇)

前言从今天我将会写.net core实战系列&#xff0c;以我最近完成的短信服务作为例子。该系列将会尽量以最短的时间全部发布出来。源码也将优先开源出来给大家。源码地址&#xff1a;https://github.com/SkyChenSky/Sikiro.SMS.NET CORE简介ASP.NET Core 是一个跨平台的高性能开源…

P3172-[CQOI2015]选数【dp,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P3172 题目大意 求有多少个长度为NNN的值域在[L,R][L,R][L,R]这个区间的序列满足它们的gcdgcdgcd恰好是KKK。 解题思路 dpdpdp容斥思想 我们先让L⌊LK−1K⌋,R⌊RK⌋L\lfloor\frac{LK-1}{K}\rfloor,R\lfloor\frac{R}{K}\rfl…

博弈论总结

前言 本篇为博弈论总结&#xff0c;文章会按题目类型分类。 基础铺垫——必胜点和必败点的介绍 P点&#xff1a;必败点&#xff0c;换而言之&#xff0c;就是谁处于此位置&#xff0c;则在双方操作正确的情况下必败。 N点&#xff1a;必胜点&#xff0c;处于此情况下&#x…