【HDOJ6958】KD-Graph(并查集)
1009 KD-Graph
题意:
- 给出一张n个点m条边的加权无向图和一个整数K,求一个数字D可以将图分为K组,组内任意两点存在路径且小于等于D,组外不存在小于等于D的路径。不存在D输出-1。
思路:
- 将边按权值从小到大排序,每一阶段取出同权值的所有边,将这些边的端点用并查集两两合并,若某一阶段的全部边合并完,并查集数量为k,则当前阶段合并边的权值就是答案,否则输出-1。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 3e6+10;struct Edge{int u,v,w;}e[maxn];
bool cmp(Edge a, Edge b){return a.w<b.w;}int fa[maxn+10];
void init(int n){for(int i = 0; i <= n; i++)fa[i]=i;}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void merge(int x, int y){x=find(x);y=find(y);if(x!=y)fa[x]=y;}
int count(int n){int cnt=0; for(int i = 1; i <= n; i++)if(fa[i]==i)cnt++;return cnt;}int main(){ios::sync_with_stdio(false);int T; cin>>T;while(T--){int n, m, k; cin>>n>>m>>k;for(int i = 1; i <= m; i++)cin>>e[i].u>>e[i].v>>e[i].w;init(n);sort(e+1,e+m+1,cmp);int now = n, ans = 0, ok = 0; //now表示刚开始有n组(当前并查集个数)for(int i = 1; i <= m; i++){if(e[i].w != e[i-1].w){if(now==k){//直到分成k组,此时的最大ans满足组外不存在小于等于它的路径cout<<ans<<"\n";ok = 1;break;}}//如果两点间已经有更小的路径就不管if(find(e[i].u)==find(e[i].v))continue;//用这条边去合并,将合并的点放入同一组merge(e[i].u, e[i].v);now--;//组数-1(并查集个数-1)ans = e[i].w; //组内<=D(不断变大)}if(ok==0)cout<<(now==k?ans:-1)<<"\n";}return 0;
}
【HDOJ6958】KD-Graph(并查集)相关推荐
- 牛客多校3 - Operating on a Graph(并查集+链表合并)
题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的无向图,每个点初始时都有颜色 i ,i ∈ [ 0 , n - 1 ] ,接下来有 q 次操作,每次操作会给出一种颜色 x ,分两种 ...
- Harmonious Graph(并查集)
思路 题意:n个点,m条边,组成若干个连通图,如果一个点x能到另一个点y,那么如果(x,y)中任意一个点,都能到y,就称这个图为和谐图,求需要连多少个边,使得所有连通图成为和谐图 做法:用并查集存下所 ...
- Harmonious Graph CodeForces - 1253D(思维+并查集)
You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to n. The graph ...
- 【CF#505B】Mr. Kitayuta's Colorful Graph (并查集或Floyd或BFS)
题干: Mr. Kitayuta has just bought an undirected graph consisting of n vertices and m edges. The verti ...
- 图论 + 并查集 ----最小生成树重构图 + 可撤销并查集 + set启发式合并 时间线上的离线求解 D. Graph and Queries
解题思路 题目大意: 就是给你一个无向图,每个点都有一个权值,和qqq次询问 每次询问有两种操作 1 x:就询问从x点出发,能访问到的最大权值是多少,并把最大权值那个点的权值设置为0 2 x:就是删除 ...
- Graph Destruction 并查集,图论(500)
题意 : 给一n个点m条边的无向图,问逐渐删去1-n点及它们的边,分别输出当前剩下多少个连通区域 思路 : 求连通块,想到了并查集,但并查集是增边,这里是减边,只要倒序考虑问题即可,那么问题转换为 : ...
- 【XSY2469】graph 分治 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,问删去每个点后,原图是不是二分图. \(n,m\leq 100000\) 题解 一个图是二分图\(\Longleftrightarrow\)该图 ...
- UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)
显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...
- 【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...
最新文章
- 构筑超异构计算时代,英特尔 AI 全布局
- 北京智源大会 | 启元AI战胜中国星际冠军,智能体激发人类探索未知
- android通过webservice连接SQL数据库(二)客户端
- Python之深入解析如何制作国际空间站实时跟踪器
- 说说云盘背后的黑科技!
- 新浪微博Anroid开发(二)
- NodeJS开发环境配置
- Citrix、Microsoft、VMware虚拟桌面之网页接口登录对比
- 接上文 ,解决 虚拟机VM,U盘(磁盘)装有系统,将其中系统安装到另外一块磁盘的具体操作
- MySQL(8)--- 选择数据库
- Django的认证系统(auth)
- php分发,详细介绍php钩子和简单分发方式
- informix 如何下载
- 房屋户型图设计工具Room Arranger for Mac
- 计算机信息技术学ps吗,小学信息技术photoshop教案.docx
- jquery 3D旋转banner图效果 demo
- Scrapy: 爬虫返回403错误
- 计算机更新后无法远程,重装系统后无法进行远程桌面连接怎么办
- Codeforces Gym 100015A Another Rock-Paper-Scissors Problem 找规律
- apple登录服务端验证
热门文章
- Scatter matrix(散布矩阵)
- C++基础——模板的0初始化
- php url路由入门实例,ThinkPHP URL 路由实例
- python自动化测试-python自动化测试
- python爬取小视频-40行代码教你利用Python网络爬虫批量抓取小视频
- python语言入门-Python语言入门.pdf
- 零基础自学python-零基础如何自学成为Python高手?
- 一张图学会python应用到excel-Python应用之------Excel操作
- python3.6安装步骤-手动安装python3.6的操作过程详解
- 怒拒Facebook:语音识别大神、Kaldi之父将加盟小米