1640 天气晴朗的魔法

题目来源: 原创

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题

这样阴沉的天气持续下去,我们不免担心起他的健康。

51nod魔法学校近日开展了主题为“天气晴朗”的魔法交流活动。

N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法师的魔力连接起来,形成一个魔法阵。

魔法链是做法成功与否的关键。每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和。

由于逆天改命的魔法过于暴力,所以我们要求阵中的魔法链的魔力值最大值尽可能的小,与此同时,魔力值之和要尽可能的大。

现在给定魔法师人数N,魔法链数目M。求此魔法阵的最大效果。

Input

两个正整数N,M。(1 <= N <= 10^5, N <= M <= 2 * 10^5)接下来M行,每一行有三个整数A, B, V。(1 <= A, B <= N, INT_MIN <= V <= INT_MAX)保证输入数据合法。

Output

输出一个正整数R,表示符合条件的魔法阵的魔力值之和。

Input示例

4 6
1 2 3
1 3 1
1 4 7
2 3 4
2 4 5
3 4 6

Output示例

12
 
 

分析:

其实这个题目读懂题目后很好做,求的是在最大值最小的前提下,魔法值之和最大的生成树

其实就是先求出最小生成树之后,记录一下生成树中的最大值,然后求边权最大值为这个值的最大生成树

注意51行到53行,一定要进行这一步处理,不然会WA。。。。

代码:

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 const int MAXN=100000+30;
  4 const int MAXM=2*MAXN+30;
  5 int f[MAXN];
  6 struct edge
  7 {
  8     int u,v;
  9     long long w;
 10 }e[MAXM];
 11 int tot;
 12 void addedge(int v,int u,int w)
 13 {
 14     e[tot].v=v;
 15     e[tot].u=u;
 16     e[tot].w=w;
 17     tot++;
 18 }
 19 int fin(int x)
 20 {
 21     if(f[x]==-1)
 22         return x;
 23     else{
 24         f[x]=fin(f[x]);
 25         return f[x];
 26     }
 27 }
 28 bool cmp(edge a,edge b)
 29 {
 30     return a.w<b.w;
 31 }
 32 long long kru(int n)
 33 {
 34     memset(f,-1,sizeof(f));
 35     sort(e,e+tot,cmp);
 36     long long num=0,ans=0;
 37     int u,v,w;
 38     int i;
 39     for(i=0;i<tot;i++){
 40         u=e[i].u,v=e[i].v,w=e[i].w;
 41         int t1=fin(u);
 42         int t2=fin(v);
 43         if(t1!=t2){
 44             num++;
 45             f[t2]=t1;
 46         }
 47         if(num==n-1) break;
 48     }
 49     num=0;
 50     memset(f,-1,sizeof(f));
 51     while(e[i].w==e[i+1].w){
 52         i++;
 53     }
 54     for(;i>=0;i--){
 55         u=e[i].u,v=e[i].v,w=e[i].w;
 56         int t1=fin(u);
 57         int t2=fin(v);
 58         if(t1!=t2){
 59             num++;
 60             ans+=w;
 61             f[t2]=t1;
 62         }
 63         if(num==n-1) break;
 64     }
 65     if(num<n-1) return -1;
 66     else return ans;
 67 }
 68 int main()
 69 {
 70     //freopen("data.in","r",stdin);
 71     int n,m;
 72     int a,b;
 73     long long v;
 74     tot=0;
 75     scanf("%d%d",&n,&m);
 76     for(int i=0;i<m;i++){
 77         scanf("%d%d%lld",&a,&b,&v);
 78         addedge(a,b,v);
 79     }
 80     //printf("%lld\n",kru(n));
 81     cout<<kru(n)<<endl;
 82 }
 83 

View Code

转载于:https://www.cnblogs.com/liuzhanshan/p/6736241.html

51nod-1640--天气晴朗的魔法(简单最小生成树)相关推荐

  1. 51Nod 1640 - 天气晴朗的魔法(最小生成树变形)

    题目链接 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 [题目描述] 这样阴沉的天气持续下去,我们不免担心起他的 ...

  2. 【图论训练】天气晴朗的魔法【最小生成树】

    思路: 因为是最大值要最小,所以直接先跑一遍最小生成树,然后跑出最大的那条边. 然后让总和最大,直接从那条边往前跑,跑最大的. c o d e code code #include<iostre ...

  3. 51Nod-1640-天气晴朗的魔法(最小生成树)

    转载于:https://www.cnblogs.com/GrowingJlx/p/6642734.html

  4. nod-1640-天气晴朗的魔法

    题目: 这样阴沉的天气持续下去,我们不免担心起他的健康. 51nod魔法学校近日开展了主题为"天气晴朗"的魔法交流活动. N名魔法师按阵法站好,之后选取N - 1条魔法链将所有魔法 ...

  5. [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)

    L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...

  6. 51Nod - 1640

    开始想着二分最大值,然而调了调怎么都不对QAQ-. 然后看了一下解答: 最小生成树确定最小的边究竟是多少,因为你要求最大边最小嘛-那这样肯定能求出最小值,但这样结果未必最优-.所以,我们再倒着去加入并 ...

  7. 51nod 1021 石子归并 (动态规划 简单代码)

    题目: 思路:动态规划,递推式子 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]); dp[i][j]表示合并第i ...

  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 24丨不同国家的天气类型【难度简单】​

    [未来的你,会感谢今天努力的你]每日两题,一难一易,每天进步一点点,可能会直接导致一场面试的成功,或工作的轻松搞定,从而升职加薪迎娶白富美,加油小伙伴!

  9. 我的世界服务器如何修改天气,我的世界怎么切换天气 原来这么简单

    我的世界怎么切换天气?原来这么简单.在我的世界中,天气系统也是相当真实的,不但有正常的晴天,还有多云.下雨天.下雪天等等.但是在夜晚的时候,有些天气非常影响玩家的视野,并且下雨.下雪的时候,游戏也比较 ...

最新文章

  1. python发邮件包含表格,在Python中在电子邮件正文中包含Excel表
  2. Ktor 1.0发布:JetBrains推出的Kotlin Web框架
  3. Word组件 Spire.Doc for .NET V6.0.3发布 | 修复多个重大bug
  4. 八皇后问题python实现_八皇后问题的python实现
  5. Oracle 数据库启动 startup和startup force的区别
  6. C++之手写strlen函数
  7. uni app 调用网络打印机_uni-app 的使用体验总结
  8. ++ 多核cpu 并行_一文读懂什么是多核并行计算(三)
  9. HDU2191 多重背包或者01背包 xingxing在努力
  10. 发布一个域安全级别的无代码InfoPath表单作为文档库模版 (InfoPath 一)
  11. 7.15 HTMl + CSS 笔记整理(一)
  12. STM32 USB主机通信连接中断过程
  13. 如何读取csv文件并将其转化为tsv文件
  14. 计算机网络研究进展,计算机网络信息空间(Cyberspace)的人文地理学的研究进展和展望.pdf...
  15. 密码学 BugKu 这不是摩斯密码
  16. 【HBase】HBase数据库基本操作(Shell)
  17. 编译原理—实验二LL(1)语法分析(一)
  18. 5G风口短信“变脸”求生,三大运营商要联手战微信?
  19. 百度真的出了瑞丽算法吗
  20. Cordova各种事件

热门文章

  1. 轻松Ghost XP系统!
  2. DotNet(C#)自定义运行时窗体设计器 一
  3. 宏信建发IT信息部门-大数据-HR面试
  4. ubuntu运行navicat没有反应的解决方法
  5. OpenCV学习笔记五-图像混合
  6. 数据结构:二分查找python实现
  7. abv asp是静态网页吗_2019年seo动态网页优化“指南针”
  8. 【机器学习】集成学习之梯度提升树GBDT
  9. java调用gbase存储过程,GBase 8T数据库存储过程使用出参示例
  10. 测试人员如何使用浏览器的f12_测试过程中如何快速定位一个bug