302125: CF404C. Restore Graph

Memory Limit:256 MB Time Limit:1 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

Restore Graph

题意翻译

对于n个顶点,我们对其进行加边操作! 首先题目会给你n,k 再给n个数 第 i 个为$d_i$,就是从某一点开始的到i的最短路。 我们对其加边使其满足这最后的答案,如果不能满足,就是输出-1 一个顶点的度 应该不大于 k Translated by @Bartholomew

题目描述

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.

输入输出格式

输入格式


The first line contains two space-separated integers $ n $ and $ k $ $ (1<=k<n<=10^{5}) $ . 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 $ .

输出格式


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<=10^{6}) $ — the number of edges in the found graph. In each of the next $ m $ lines print two space-separated integers $ a_{i} $ and $ b_{i} $ $ (1<=a_{i},b_{i}<=n; a_{i}≠b_{i}) $ , denoting the edge that connects vertices with numbers $ a_{i} $ and $ b_{i} $ . The graph shouldn't contain self-loops and multiple edges. If there are multiple possible answers, print any of them.

输入输出样例

输入样例 #1

3 2
0 1 1

输出样例 #1

3
1 2
1 3
3 2

输入样例 #2

4 2
2 0 1 3

输出样例 #2

3
1 3
1 4
2 3

输入样例 #3

3 1
0 0 0

输出样例 #3

-1

Input

题意翻译

对于n个顶点,我们对其进行加边操作! 首先题目会给你n,k 再给n个数 第 i 个为$d_i$,就是从某一点开始的到i的最短路。 我们对其加边使其满足这最后的答案,如果不能满足,就是输出-1 一个顶点的度 应该不大于 k Translated by @Bartholomew

加入题单

算法标签: