51nod——1640 天气晴朗的魔法 有边权限制的最大生成树
好好读题嗷:“所以我们要求阵中的魔法链的魔力值最大值尽可能的小,与此同时,魔力值之和要尽可能的大。”
第一条件是生成树的最大边权更小,第二条件是在最大边权的限制下搞一个最大生成树。
至于最大生成树,如果用prime就把边权全都置负,如果用kruskal就把边权降序排列,生成的时候加一个小判断。
#include <bits/stdc++.h>
using namespace std;
#define maxn 200050
struct edge { int u, v, cost; } es[maxn];//连接顶点u和v的边,权值为cost
bool cmp1(edge e1, edge e2){
return e1.cost < e2.cost;
}
bool cmp2(edge e1, edge e2){
return e1.cost > e2.cost;
}
int V,E;//顶点数和边数 //并查集部分
int par[maxn];
int find(int a){
return a==par[a]?a:(par[a]=find(par[a]));
}
void unite(int a,int b){
par[find(b)]=find(a);
} int kruskal1(){//返回最小生成树的最大边权
sort(es,es+E,cmp1);
int res=;
for(int i=;i<E;i++){
edge e = es[i];
if(find(e.u)!=find(e.v)){
unite(e.u,e.v);
res=max(res,e.cost);
}
}
return res;
}
long long kruskal2(int k){//返回边权均小于k的最大生成树的边权和
sort(es,es+E,cmp2);
long long res=;
for(int i=;i<E;i++){
edge e = es[i];
if(find(e.u)!=find(e.v)&&e.cost<=k){
unite(e.u,e.v);
res+=e.cost;
}
}
return res;
}
int main(){
std::ios::sync_with_stdio();
cin.tie();
cin>>V>>E;
for(int i=;i<=V;i++) par[i]=i;
for(int i=;i<E;i++)
cin>>es[i].u>>es[i].v>>es[i].cost;
int k=kruskal1(); for(int i=;i<=V;i++) par[i]=i;
long long ans=kruskal2(k);
cout<<ans<<endl;
return ;
}
51nod——1640 天气晴朗的魔法 有边权限制的最大生成树的更多相关文章
- 51Nod - 1640 天气晴朗的魔法 大+小生成树(最大值最小)/二分
天气晴朗的魔法 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的 ...
- 51nod 1640 天气晴朗的魔法
题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为“天气晴朗 ...
- 51nod 1640 天气晴朗的魔法 最小生成树
题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 题解: 先求最小生成树,记录最大边. 然后求最大生成树 ...
- 51nod 1640 天气晴朗的魔法 二分 + 克鲁斯卡算法(kruskal算法) 做复杂了
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 一开始想的时候,看到要使得最大值最小,那这样肯定是二分这个最大值了 ...
- 51 Nod 1640 天气晴朗的魔法( Kruskall )
#include <bits/stdc++.h> typedef long long LL; using namespace std; ; struct node{ LL u,v,w; n ...
- 51nod 天气晴朗的魔法 - (Kruskall最小生成树)
题目: 基准时间限制:1 秒 空间限制:131072 KB 51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接 ...
- 51nod 1640 MST+二分
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 1640 天气晴朗的魔法 题目来源: 原创 基准时间限制:1 秒 ...
- 51nod-1640--天气晴朗的魔法(简单最小生成树)
1640 天气晴朗的魔法 题目来源: 原创 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日 ...
- HUAS 2017暑假第六周比赛-题解
A.Parenthesis 括号匹配的问题有一种经典的做法. 将左括号看成1,右括号看成-1,做一遍前缀和sum. 括号序列是合法的当且仅当\(sum[n]=Min(sum[1],sum[2].... ...
随机推荐
- Spring ThreadPoolTaskExecutor队列满的异常处理
<!-- 配置线程池 --> <bean id="threadPool" class="org.springframework.scheduling.c ...
- shiro 重定向 后 带有 sessionId 的 解决 办法
http://blog.csdn.net/aofavx/article/details/51701012
- Luogu P4551 最长异或路径 01trie
做一个树上前缀异或和,然后把前缀和插到$01trie$里,然后再对每一个前缀异或和整个查一遍,在树上从高位向低位贪心,按位优先选择不同的,就能贪出最大的答案. #include<cstdio&g ...
- ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall (暴力)
题意:一个n*m的方格矩阵,有的格子被涂成了黑色,问该矩阵中有多少个子矩阵,子矩阵不包含黑色格子; 思路:对于一个长为L, 高为H的无黑点矩阵中包含的高为H的子矩阵个数为L+(L-1)+(L-2)+. ...
- Codeforces Round #129 (Div. 2) A
Description The Little Elephant loves Ukraine very much. Most of all he loves town Rozdol (ukr. &quo ...
- RMAN restore fails with ORA-01180: can not create datafile 1 (文档 ID 1265151.1)
http://blog.itpub.net/26655292/viewspace-2131269/ ########Q&A issue1:ORA-01180: can not create d ...
- (转)linux下文件删除的原理精华讲解(考试题答案系列)
linux下文件删除的原理精华讲解(考试题答案系列) 说明:本文为老男孩linux培训某节课前考试试题及答案分享博文内容的一部分,也是独立成题的,你可以点下面地址查看全部的内容信息.http://ol ...
- 基于php缓存的详解
nginx缓存 nginx有两种缓存机制:fastcgi_cache和proxy_cache 下面我们来说说这两种缓存机制的区别吧 proxy_cache作用是缓存后端服务器的内容,可能是任何内容,包 ...
- iOS开发ReactiveCocoa学习笔记(一)
学习 RAC 我们首先要了解 RAC 都有哪些类 RACSignal RACSubject RACSequence RACMulticastConnection RACCommand 在学习的时候写了 ...
- JAVA方法定义和调用
类的方法代表的是实例的某种行为或功能 定义类的方法 访问修饰 类型 方法名(参数列表){ //方法体 } 1.把方法当作一个模块,是个“黑匣子”,完成某个特定的功能,并返回处理结果 2.方法分类“ 返 ...