uva 1265 (LA 4848)
解法:kruskal的思想,先将边权大的连接,然后判断是否满足 , 依次连接即可!
我们先考虑用kruskal算法求最大生成树的过程 , 假如我们要加入一条新边 ,如果这条新边上的点和以前已经加入的一些点是可到达的(在这个还未形成的最大生成树上) , 如果这样子图存在 ,那么这个子图肯定包括所有以前加入并且和当前加入点相连(可到达)的点。
代码:
#include
#include
#include
#include
#include
using namespace std;
#define MAXN 5010
#define INF 0x3f3f3f3f
#define min(x , y) (x)<(y)?(x):(y)
struct node
{
int x ,y;
int w;
}edge[MAXN*2505];
struct node1
{
int x;
int w;
}e;
int p[MAXN];
vectorgrap[MAXN];
int n , m , minx , maxx;
int fa;
int num[MAXN];
bool cmp(node x , node y)
{
return x.w<= y.w;
}
void init()
{
for(int i =0; i <= n; i++)
{
p[i] = i;
grap[i].clear();
}
}
int find(int x)
{
int g = x ,h;
while(x !=p[x]) x = p[x];
while(p[g]!= x)
{
h =p[g];
p[g] =x;
g = h;
}
returnx;
}
bool check(int fa)
{
int i ,j;
int minx =INF , maxx = 0;
int x;
for(i = 1; i<= n; i++)
{
x =find(i);
if(x !=fa) continue;
for(j = 0; j< grap[i].size(); j++)
{
x =find(grap[i][j].x);
if(x ==fa)
{
if(grap[i][j].w < minx) minx =grap[i][j].w;
}
else if(grap[i][j].w >maxx) maxx = grap[i][j].w;
}
}
if(maxx< minx) return true;
else returnfalse;
}
int kruskal()
{
sort(edge ,edge+m , cmp); //对边进行排序
int i , x ,y , k = 0;
for(i = 1; i<= n; i++) p[i]= i;
for(i = 1; i<= n; i++) num[i] = 1;
int sum =0;
for(i = m-1;i >= 0; i--)
{
x =find(edge[i].x); // 判断这两个点是不是在同一颗树上
y =find(edge[i].y);
if(x !=y)
{
if(k ==(n-2)) break;
p[x] =y;
num[y] +=num[x];
if(check(y)) sum += num[y];
k +=1;
}
}
returnsum+n;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int i;
scanf("%d%d" , &n , &m) ;
init();
for(i = 0; i< m; i++)
{
scanf("%d %d%d" , &edge[i].x , &edge[i].y ,&edge[i].w);
e.x =edge[i].y , e.w = edge[i].w;
grap[edge[i].x].push_back(e);
e.x =edge[i].x;
grap[edge[i].y].push_back(e);
}
i =kruskal();
cout<<i<<endl;
}
return0;
}
uva 1265 (LA 4848)相关推荐
- UVA 413|LA 5388|POJ 1492|ZOJ 1338 Up and Down Sequences
https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364837 题意:如果是上升序列,上升序列的长度不是所有上升数字的,是这么规 ...
- UVa在线比赛单题汇总-----DP专题
动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...
- 刘汝佳训练指南《网络流》专题 BY 9974
最近一直在做白书上的网络流, 做得几乎差不多了,在这小小总结一下. 已经忽略很水的题.差不多按难度排序了. UVa 11248 增广小优化. UVa 1306(LA ...
- UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVa LA 3882 - And Then There Was One 递推,动态规划 难度: 2
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- 判断条件UVa 10192 - Vacation(LCS水题)
PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 题目:http://uva.onlinejudge.org/index.ph ...
- [搜索]UVa 129 困难的串
题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...
- uva 401.Palindromes
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- Uva 3767 Dynamic len(set(a[L:R])) 树套树
Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...
最新文章
- find_in_set
- 刷爆了!这项技术BAT力捧!程序员:我彻底慌了...
- html复选框位置,html – 对齐复选框和标签
- java 两个等长数组的中位数_查询两个数组的中位数
- ggplot2设置坐标轴范围_Matplotlib入门-2-坐标轴axis/axes设置
- 如何将一个文件分割成多个小文件
- 3012C语言_数据
- 工业交换机如何预防雷电?
- mysql添加字符串日期时间_mysql学习笔记--- 字符串函数、日期时间函数
- HP-UX 11i v2安装使用python 2.5.2
- ubuntu安装 opencv-3.4.3
- 最新弱口令字典,常用密码,弱密码集合
- 使用Layered分层窗口实现视频会议中的桌面区域共享
- 怎样对php手册解除锁定,word锁定怎么解锁
- python bs期权模型_使用python第二部分建立股票期权评估模型
- yigo基础学习笔记3_数据迁移
- “数据”企业之命脉,守护有责。
- tomcat 设置缓存大小
- 怎么拍照识别植物的名称呢?教大家一个识别小妙招
- 浅谈精益数字化工厂(Lean Digital Factory, LDF)