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(并查集)相关推荐

  1. 牛客多校3 - Operating on a Graph(并查集+链表合并)

    题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的无向图,每个点初始时都有颜色 i ,i ∈ [ 0 , n - 1 ] ,接下来有 q 次操作,每次操作会给出一种颜色 x ,分两种 ...

  2. Harmonious Graph(并查集)

    思路 题意:n个点,m条边,组成若干个连通图,如果一个点x能到另一个点y,那么如果(x,y)中任意一个点,都能到y,就称这个图为和谐图,求需要连多少个边,使得所有连通图成为和谐图 做法:用并查集存下所 ...

  3. 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 ...

  4. 【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 ...

  5. 图论 + 并查集 ----最小生成树重构图 + 可撤销并查集 + set启发式合并 时间线上的离线求解 D. Graph and Queries

    解题思路 题目大意: 就是给你一个无向图,每个点都有一个权值,和qqq次询问 每次询问有两种操作 1 x:就询问从x点出发,能访问到的最大权值是多少,并把最大权值那个点的权值设置为0 2 x:就是删除 ...

  6. Graph Destruction 并查集,图论(500)

    题意 : 给一n个点m条边的无向图,问逐渐删去1-n点及它们的边,分别输出当前剩下多少个连通区域 思路 : 求连通块,想到了并查集,但并查集是增边,这里是减边,只要倒序考虑问题即可,那么问题转换为 : ...

  7. 【XSY2469】graph 分治 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,问删去每个点后,原图是不是二分图. \(n,m\leq 100000\) 题解 一个图是二分图\(\Longleftrightarrow\)该图 ...

  8. UOJ14 UER #1 DZY Loves Graph(最小生成树+并查集)

    显然可以用可持久化并查集实现.考虑更简单的做法.如果没有撤销操作,用带撤销并查集暴力模拟即可,复杂度显然可以均摊.加上撤销操作,删除操作的复杂度不再能均摊,但注意到我们在删除时就可以知道他会不会被撤销 ...

  9. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

最新文章

  1. 构筑超异构计算时代,英特尔 AI 全布局
  2. 北京智源大会 | 启元AI战胜中国星际冠军,智能体激发人类探索未知
  3. android通过webservice连接SQL数据库(二)客户端
  4. Python之深入解析如何制作国际空间站实时跟踪器
  5. 说说云盘背后的黑科技!
  6. 新浪微博Anroid开发(二)
  7. NodeJS开发环境配置
  8. Citrix、Microsoft、VMware虚拟桌面之网页接口登录对比
  9. 接上文 ,解决 虚拟机VM,U盘(磁盘)装有系统,将其中系统安装到另外一块磁盘的具体操作
  10. MySQL(8)--- 选择数据库
  11. Django的认证系统(auth)
  12. php分发,详细介绍php钩子和简单分发方式
  13. informix 如何下载
  14. 房屋户型图设计工具Room Arranger for Mac
  15. 计算机信息技术学ps吗,小学信息技术photoshop教案.docx
  16. jquery 3D旋转banner图效果 demo
  17. Scrapy: 爬虫返回403错误
  18. 计算机更新后无法远程,重装系统后无法进行远程桌面连接怎么办
  19. Codeforces Gym 100015A Another Rock-Paper-Scissors Problem 找规律
  20. apple登录服务端验证

热门文章

  1. Scatter matrix(散布矩阵)
  2. C++基础——模板的0初始化
  3. php url路由入门实例,ThinkPHP URL 路由实例
  4. python自动化测试-python自动化测试
  5. python爬取小视频-40行代码教你利用Python网络爬虫批量抓取小视频
  6. python语言入门-Python语言入门.pdf
  7. 零基础自学python-零基础如何自学成为Python高手?
  8. 一张图学会python应用到excel-Python应用之------Excel操作
  9. python3.6安装步骤-手动安装python3.6的操作过程详解
  10. 怒拒Facebook:语音识别大神、Kaldi之父将加盟小米