博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces 404C Ivan and Powers of Two
阅读量:4986 次
发布时间:2019-06-12

本文共 2743 字,大约阅读时间需要 9 分钟。

Ivan and Powers of Two
Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u
Submit     

Description

Valera had an undirected connected graph without self-loops and multiple edges consisting of n vertices. The graph had an interesting property: there were at most k edges adjacent to each of its vertices. For convenience, we will assume that the graph vertices were indexed by integers from 1 to n.

One day Valera counted the shortest distances from one of the graph vertices to all other ones and wrote them out in array d. Thus, element d[i] of the array shows the shortest distance from the vertex Valera chose to vertex number i.

Then something irreparable terrible happened. Valera lost the initial graph. However, he still has the array d. Help him restore the lost graph.

Input

The first line contains two space-separated integers n and k(1 ≤ k < n ≤ 105). Number n shows the number of vertices in the original graph. Number k shows that at most k edges were adjacent to each vertex in the original graph.

The second line contains space-separated integers d[1], d[2], ..., d[n](0 ≤ d[i] < n). Number d[i] shows the shortest distance from the vertex Valera chose to the vertex number i.

Output

If Valera made a mistake in his notes and the required graph doesn't exist, print in the first line number -1. Otherwise, in the first line print integer m(0 ≤ m ≤ 106) — the number of edges in the found graph.

In each of the next m lines print two space-separated integers ai and bi(1 ≤ ai, bi ≤ nai ≠ bi), denoting the edge that connects vertices with numbers ai and bi. The graph shouldn't contain self-loops and multiple edges. If there are multiple possible answers, print any of them.

Sample Input

Input
3 2 0 1 1
Output
3 1 2 1 3 3 2
Input
4 2 2 0 1 3
Output
3 1 3 1 4 2 3
Input
3 1 0 0 0
Output
-1 由图上的一点到其他点的距离,还原整个图。易知原图必定是一个树,因为给出的是一个点到其他点的距离,说明这个点到其他的点必定是唯一联通的(即使原图是多路联通,对每个同路取最小值后,也只剩 下一条通路了)。所以就是求一个树的过程。 我们把各个点按照到根节点的距离分类。这些距离可以是1 2 3.。。。n-1; 然后按照距离从小到大连接,每次的距离增加1,所以新增加的点是和上一个的点直接相连的。由于距离根节点距离为1的点开始没有连线,所以起始边数为0,之后的必定和比它到根节点距离少1的 节点连线,所以边数起始值是1.
#include
#include
#include
#include
#define max1 100005using namespace std;int main(){ int n,k; vector< pair
>ans; vector
dis[max1]; scanf("%d%d",&n,&k); int m=0; for(int i=1;i<=n;i++) { int di; scanf("%d",&di); m=max(di,m); dis[di].push_back(i); } if(dis[0].size()!=1) {printf("-1\n");return 0;} for(int i=1;i<=m;i++) { int edge=(i!=1),node=0; for(int j=0;j
View Code

 

转载于:https://www.cnblogs.com/superxuezhazha/p/5375592.html

你可能感兴趣的文章
微软企业库5.0系统(一):使用缓存 Microsoft.Practices.EnterpriseLibrary.Caching(初级篇)...
查看>>
5.29
查看>>
浅谈Java中的equals和==(转载)
查看>>
性能测试之稳定性测试(可靠性测试)
查看>>
Flask02 路由的书写、蓝图、利用蓝图实现url前缀、利用蓝图实现子域名、访问静态文件...
查看>>
linux c lseek (空洞文件) 分析和处理
查看>>
String分析
查看>>
MySQL学习——SQL查询语句(连接查询&子查询)(三)
查看>>
oracle pl sql 行转列 (数据翻转实现)
查看>>
优秀的项目经理需要具备哪些品质?
查看>>
Avi视频生成缩略图时,提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”...
查看>>
命令行执行python模块时提示ImportError: No module named xxx
查看>>
WPF界面假死
查看>>
asp.net mvc 2.o 中使用JQuery.uploadify
查看>>
C#学习笔记2
查看>>
Java 面向对象 之 super 关键字
查看>>
Java 设计模式 之 观察者模式
查看>>
Failed to load JavaHL Library.
查看>>
HTML5的本地存储
查看>>
输入框实时模糊匹配输入
查看>>