codeforces 1255 B. Fridge Lockers
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相关推荐
- 【CodeForces 1255B --- Fridge Lockers】
[CodeForces 1255B --- Fridge Lockers] Description Hanh lives in a shared apartment. There are n peop ...
- Codeforces Round #601 (Div. 2)B. Fridge Lockers
B. Fridge Lockers [题目类型]模拟 [题目链接]B题链接 [题目大意]给你n个冰箱,m个铁链对这n个冰箱连接,要求使用所有的铁链对冰箱进行连接,满足非冰箱主人不能独自打开,u冰箱连接 ...
- B. Fridge Lockers
题目:B. Fridge Lockers 思考:题目要求的是每一个点最少要有两条边连接,所以可以先构成一个环.然后再把剩余的最短的边连接起来. #include <bits/stdc++.h&g ...
- Codeforces 1255B Fridge Lockers
思路: 1.如果想不被其他人解开,那最优的办法就是连成环 2.多出来的次数就重复连开销最小的两个点 代码: #define IOS ios::sync_with_stdio(false) #inclu ...
- CodeForces - 1255B Fridge Lockers 思维+建图)
题目链接:https://vjudge.net/contest/344327#problem/C 翻译: 输入两个数n和m.表示人的数量和铁链的数量. 接下来n个数,表示每一点的权值. 每个人有一个冰 ...
- cf 、B. Fridge Lockers(思维 + 贪心)
题意:有n个冰箱,然后m个锁链,每条锁链两头都连着冰箱,然后让你每个冰箱都至少连着两条锁链指向不同冰箱.买锁链的钱是两个冰箱重量的和,问最少花费多少钱可以满足,如果满足输出最小花费,否则,输出-1. ...
- 1255B. Fridge Lockers Codeforce题解
原题链接 思路:这题问的是,给你n个冰箱,每个冰箱重量为a[i],冰箱由几条链连接,解锁冰箱的条件是解锁这个冰箱的链,冰箱的主人拥有他的冰箱所连接的链的钥匙,故他自己可以解锁冰箱,但是其他人需要合作解 ...
- Codeforces Round #601 (Div. 2)
传送门 文章目录 A.Changing Volume 题意: 思路: B. Fridge Lockers 题意: 思路: C. League of Leesins 题意: 思路: D. Feeding ...
- Codeforces Global Round 2 B. Alyona and a Narrow Fridge(二分)
题目链接:https://codeforces.com/contest/1119/problem/B 题意是给了n个水瓶,一个高度h,现在要把这n个水瓶按顺序放到h*2的柜子里,柜子里可 ...
最新文章
- Competition——AI:国内外人工智能比赛平台以及竞赛类型、竞赛题目、举行时间等之详细攻略(最全+ing)
- 我的2015:创业年终总结
- vaniglia 源码学习 (六)
- IDEA、Sublime、Eclipse、VSCode 常用快捷键整合
- 手绘风格的数据可视化 (萌萌风)Sketchify,及其他可视化工具(商业风)
- Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers
- java监控rabbitMq服务状态,spring cloud 的监控turbine-rabbitmq的示例
- python全局变量赋值_Python全局变量和局部变量
- box-sizing的不同属性值间的区别
- windows 网络编程报错 error LNK2019
- 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.1)——漫反射(diffuse reflection)
- Debian9系统上 基于Qt5.12.1 开发的QML界面程序 无法输入中文
- SI9000差分阻抗计算示例
- wordpress图文安装教程 非常详细
- 国内App推广终极37个方法
- 测试案例中@SpringBootTest与@RunWith**的含义
- 支付宝扫一扫连接WIFI
- 浪潮之巅—帝国的余晖ATT公司
- 【电商】订单信息与状态流转
- 莱布尼兹普遍演算的定义注释--逻辑与算法之十八
热门文章
- Suzy找到实习了吗Day 14 | 二叉树开始啦 二叉树的分类、定义、遍历方法
- 两部手机怎样才能把数据都传过来_两台苹果手机怎么传数据
- 【欣赏】logo设计原则 + 一组设计独特的logo欣赏
- VC 不愿承认的 4 个暗黑事实
- 从数据开始:『安卓读书』8000 万下载量炼成记
- python爬虫——智联招聘(上)
- 湖南科技大学学生首夺2011德国红点设计大奖
- 计算机的应用与分类,办公自动化是计算机的一项应用,按计算机应用的分类,它属于( )...
- macos 虚拟镜像文件_如何在macOS中使用虚拟文件测试网络或硬盘速度
- 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss