C.Restore Graph(クラスbfsシミュレーション+構築)


https://codeforces.com/problemset/problem/404/C
 
題意翻訳
n個の頂点に対して、エッジ操作を行います!
まず問題はあなたにnをあげて、kは更にn個の数の第i個をあげてd_ですidiは、ある点からiへの最短ルートです.最後の答えを満たすようにエッジを付けます.満たさなければ、出力-1です.
1つの頂点の度はk Translated by@Bartholomewより大きくないはずです
入出力サンプル
入力#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

考え方:長さを1,2,3......キューとvectormp[maxn]のバケツに別々に保存し、現在の長さiのノードを遍歴します.前のレイヤ(i-1)のチームが空でなく、そのdegree[]
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define debug(a) cout< q[maxn];
vector mp[maxn]; 
LL deg[maxn];
int main(void)
{
  cin.tie(0);std::ios::sync_with_stdio(false);
  LL n,k;cin>>n>>k;
  LL flag=0;
  for(LL i=1;i<=n;i++){
  	LL _x;cin>>_x;
  	if(_x==0) flag++;
  	q[_x].push(i);
  	mp[_x].push_back(i);
  }
  if(flag>=2){
  	cout<