UVa 1265 Tour Belt Kurscal 变型
来源:互联网 发布:螳螂虾攻击力知乎 编辑:程序博客网 时间:2024/06/14 21:31
题意:给你一个n个点m条边的无向图,让你求出所有的集合,其中这个集合内的所有边都要大于这个集合边界的边 输出所有符合的集合的元素和。
思路:其实就是按照Kruscal的思想,首先边从大到小排序,然后两个端点如果在同一集合则忽略,否则将这两个集合合并 然后判断这个集合内部的最小边是否大于集合边界的最大边,若大于则答案加上这个集合的元素个数,否则忽略。
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 5000 + 10;const int maxe = 13000000 + 10;struct Edge{ int u, v, d; Edge(int u = 0, int v = 0, int d = 0) : u(u), v(v), d(d) {} bool operator < (const Edge &rhs) const{ return d > rhs.d; }};int n, m;int pa[maxn];Edge edge[maxe];int find_set(int x){ return pa[x] == x ? x : pa[x] = find_set(pa[x]);}int judge(int be){ int ans = 0; int min_e = 1e9, max_e = 0; for(int i = 0; i < m; i++){ int x = find_set(edge[i].u); int y = find_set(edge[i].v); if(x == be && y == be) min_e = min(min_e, edge[i].d); else if(!(x != be && y != be)) max_e = max(max_e, edge[i].d); } if(min_e <= max_e) return 0; for(int i = 1; i <= n; i++) if(find_set(i) == be) ans++; return ans;}int Kruscal(){ for(int i = 1; i <= n; i++) pa[i] = i; sort(edge, edge + m); int ans = 0, cnt = 0; for(int i = 0; i < m; i++){ int x = find_set(edge[i].u); int y = find_set(edge[i].v); if(x != y){ pa[y] = x; ans += judge(x); if(++cnt == n-1) return ans; } } return ans;}void solve(){ scanf("%d%d", &n, &m); for(int i = 0; i < m; i++){ int u, v, d; scanf("%d%d%d", &u, &v, &d); edge[i] = Edge(u, v, d); } printf("%d\n", Kruscal());}int main(){ int T; scanf("%d", &T); while(T--) solve(); return 0;}
0 0
- UVa 1265 Tour Belt Kurscal 变型
- Uva-1265-Tour Belt
- uva 1265 - Tour Belt(生成树)
- uvalive 4848 Tour Belt
- Tour UVA
- Tour UVA
- Tour UVA
- Tour UVA
- Tour UVA
- Tour Belt [UVALive 4848] 并查集+枚举边长
- UVALive - 4848 Tour Belt(暴力+最小生成树)
- UVA 1452-Jump(约瑟夫环问题变型)
- uva 1347 - Tour
- Tour - UVa 1347 dp
- UVa 1347 Tour(DP)
- UVa 1347 Tour(DP)
- UVA 1347 Tour DP
- UVa - 1347 - Tour
- codeforce 568A Primes or Palindromes?
- public static <T> List<T> asList(T... a) 原型是怎么回事?
- 错误处理机制
- POJ 题目3580 SuperMemo(Splay Tree区间加,区间翻转,区间右移,插入删除,区间最小值)
- Unity3d 移动设备播放视频纹理
- UVa 1265 Tour Belt Kurscal 变型
- android listView 全部展开,并且点击Item有效,可以用scrollView包裹,实现整体滑动
- iOS pch头文件使用方法
- IT人的技术积累博客开张,用于记录一些平时的问题供自己看,其它人搜到仅供参考
- KindEditor编辑器结合EasyUi
- 黑马程序员--OC的Foundation框架之字典
- SVN学习笔记2 -- SVN相关操作
- HTML学习-网页主体标记body(二)
- OC通讯录(MRC手动管理内存)