//题目要求的是每一个点最少要有两条边连接,所以可以先构成一个环。然后再把剩余的最短的边连接起来
#include<iostream>
#include<algorithm>
using namespace std ;
const int N=;
int n,m;
struct edge {
int num;
int w;
} a[N];
int T;
bool cmp(edge a,edge b) {
return a.w<b.w;
}
void solve() {
int ans=;
for(int i=; i<=n; i++) {
ans+=*a[i].w;
}
ans+=(m-n)*(a[].w+a[].w);
cout<<ans<<endl;
for(int i=; i<n; i++) cout<<i<<" "<<i+<<endl;
cout<<n<<" "<<""<<endl;
for(int i=; i<=m-n; i++) cout<<a[].num<<" "<<a[].num<<endl;
}
int main() {
cin>>T;
while(T--) {
cin>>n>>m;
for(int i=; i<=n; i++) {
cin>>a[i].w;
a[i].num=i;
}
if(n<=||m<n) {
cout<<"-1"<<endl;
continue;
}
sort(a+,a++n,cmp);
solve();
}
return ;
}

最新文章

  1. 作业七:团队项目——Alpha版本冲刺阶段004
  2. 【转】HTTP协议详解
  3. JS中 obj.style.left 与 obj.offsetLeft 的区别
  4. HDU 2256 Problem of Precision 数论矩阵快速幂
  5. parseInt 的第二个参数
  6. 《Python核心编程》 第三章 Python基础 - 练习
  7. [改善Java代码]使用构造函数协助描述枚举项
  8. (转)如何在JavaScript与ActiveX之间传递数据3
  9. MLlib 编程指导-spark-1.2.0
  10. OpenRisc-44-or1200的pipeline整体分析
  11. python 要掌握面向对象,你得会做这些题吗?
  12. JAVA 数组作为方法返回值—返回地址
  13. 一个WPF只能输入数字的行为。
  14. ATM-简单SQL查询
  15. C现代编程
  16. 面向对象(static关键字的特点)
  17. MyEclipse 智能提示设置
  18. HDU2481 Toy
  19. Ubuntu 开机引导文件 /etc/default/grub
  20. 关于特殊目录如com null无法删除的处理办法

热门文章

  1. linux 开机自启动redis服务
  2. 如何在Mac和Windows PC之间无线共享文件
  3. 个性化和云端孤岛困扰SaaS用户,低代码PaaS或成解决之道 ZT
  4. css3基础-选择器+边框与圆角+背景与渐变
  5. JavaScript自学笔记(3)--- 用JS来实现网页浮窗
  6. LeetCode 867. 转置矩阵
  7. phyon tensorflow 安装(centos)
  8. ios输入法弹出输入框定位错乱
  9. 0010 基于DRF框架开发(03 模型序列化器)
  10. java使用JDBC连接hive(使用beeline与hiveserver2)