B. Fridge Lockers

题目链接:codeforces 1255B

题意:

   每个冰箱当有两个不同的冰箱与它相连时,它是安全的。每个冰箱有自己的花费,每条边的花费为相邻两个冰箱的花费和。求当所有冰箱安全时的总的最小花费。

解题思路:

  当只有两个冰箱 或者冰箱的个数大于边的个数 时,不可能安全,输出-1

 否则每个冰箱相连两次就可以。

注意:因为没有注意到题目中的m 最大范围为 n。只需保证m==n时,情况成立。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){int T,m,n;scanf("%d",&T);while(T--){scanf("%d%d",&n, &m);int sum = 0;for(int i = 1,x; i <= n; i++){scanf("%d",&x);sum += x;}if(n == 2 || m < n)printf("-1\n");else{printf("%d\n",2*sum);for(int i=1; i<n; i++){printf("%d %d\n",i,i+1);}printf("1 %d\n",n);}}return 0;
}

当m > n时,会多出来 m-n条边,将这些多出来的边连接在花费最小的两个冰箱上即可。

代码(c++)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1100;
struct node{int k, v;
}a[maxn];
bool cmp(node u, node p){return u.v < p.v;
}
int main(){int t;cin >> t;while(t--){int n, m, ans = 0, sum = 0;cin >> n >> m;for(int i = 1; i <= n; i++){cin >> a[i].v;a[i].k = i;sum += a[i].v;}if(n > m || n == 2){cout << -1 << endl;continue;}ans = sum * 2 + (m - n) * (a[1].v + a[2].v) * 2;cout << ans << endl;for(int i = 1; i < n; i++){cout << i << " " << i+1 << endl;}cout << n << " " << 1 << endl;for(int i = 1; i < m - n; i++){cout << a[1].k << " " << a[2].k << endl;}}return 0;
}

codeforces 1255 B. Fridge Lockers相关推荐

  1. 【CodeForces 1255B --- Fridge Lockers】

    [CodeForces 1255B --- Fridge Lockers] Description Hanh lives in a shared apartment. There are n peop ...

  2. Codeforces Round #601 (Div. 2)B. Fridge Lockers

    B. Fridge Lockers [题目类型]模拟 [题目链接]B题链接 [题目大意]给你n个冰箱,m个铁链对这n个冰箱连接,要求使用所有的铁链对冰箱进行连接,满足非冰箱主人不能独自打开,u冰箱连接 ...

  3. B. Fridge Lockers

    题目:B. Fridge Lockers 思考:题目要求的是每一个点最少要有两条边连接,所以可以先构成一个环.然后再把剩余的最短的边连接起来. #include <bits/stdc++.h&g ...

  4. Codeforces 1255B Fridge Lockers

    思路: 1.如果想不被其他人解开,那最优的办法就是连成环 2.多出来的次数就重复连开销最小的两个点 代码: #define IOS ios::sync_with_stdio(false) #inclu ...

  5. CodeForces - 1255B Fridge Lockers 思维+建图)

    题目链接:https://vjudge.net/contest/344327#problem/C 翻译: 输入两个数n和m.表示人的数量和铁链的数量. 接下来n个数,表示每一点的权值. 每个人有一个冰 ...

  6. cf 、B. Fridge Lockers(思维 + 贪心)

    题意:有n个冰箱,然后m个锁链,每条锁链两头都连着冰箱,然后让你每个冰箱都至少连着两条锁链指向不同冰箱.买锁链的钱是两个冰箱重量的和,问最少花费多少钱可以满足,如果满足输出最小花费,否则,输出-1. ...

  7. 1255B. Fridge Lockers Codeforce题解

    原题链接 思路:这题问的是,给你n个冰箱,每个冰箱重量为a[i],冰箱由几条链连接,解锁冰箱的条件是解锁这个冰箱的链,冰箱的主人拥有他的冰箱所连接的链的钥匙,故他自己可以解锁冰箱,但是其他人需要合作解 ...

  8. Codeforces Round #601 (Div. 2)

    传送门 文章目录 A.Changing Volume 题意: 思路: B. Fridge Lockers 题意: 思路: C. League of Leesins 题意: 思路: D. Feeding ...

  9. Codeforces Global Round 2 B. Alyona and a Narrow Fridge(二分)

    题目链接:https://codeforces.com/contest/1119/problem/B        题意是给了n个水瓶,一个高度h,现在要把这n个水瓶按顺序放到h*2的柜子里,柜子里可 ...

最新文章

  1. Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)
  2. 我的2015:创业年终总结
  3. vaniglia 源码学习 (六)
  4. IDEA、Sublime、Eclipse、VSCode 常用快捷键整合
  5. 手绘风格的数据可视化 (萌萌风)Sketchify,及其他可视化工具(商业风)
  6. Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers
  7. java监控rabbitMq服务状态,spring cloud 的监控turbine-rabbitmq的示例
  8. python全局变量赋值_Python全局变量和局部变量
  9. box-sizing的不同属性值间的区别
  10. windows 网络编程报错 error LNK2019
  11. 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.1)——漫反射(diffuse reflection)
  12. Debian9系统上 基于Qt5.12.1 开发的QML界面程序 无法输入中文
  13. SI9000差分阻抗计算示例
  14. wordpress图文安装教程 非常详细
  15. 国内App推广终极37个方法
  16. 测试案例中@SpringBootTest与@RunWith**的含义
  17. 支付宝扫一扫连接WIFI
  18. 浪潮之巅—帝国的余晖ATT公司
  19. 【电商】订单信息与状态流转
  20. 莱布尼兹普遍演算的定义注释--逻辑与算法之十八

热门文章

  1. Suzy找到实习了吗Day 14 | 二叉树开始啦 二叉树的分类、定义、遍历方法
  2. 两部手机怎样才能把数据都传过来_两台苹果手机怎么传数据
  3. 【欣赏】logo设计原则 + 一组设计独特的logo欣赏
  4. VC 不愿承认的 4 个暗黑事实
  5. 从数据开始:『安卓读书』8000 万下载量炼成记
  6. python爬虫——智联招聘(上)
  7. 湖南科技大学学生首夺2011德国红点设计大奖
  8. 计算机的应用与分类,办公自动化是计算机的一项应用,按计算机应用的分类,它属于(    )...
  9. macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度
  10. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss