题意:给一个有向图,
n
个点,接下来
解题思路:官方给出的题解说的很清楚,刚开始还以为是跟如论有关的东西,还是自己太天真了。直接贪心就好,好水的一道题,比赛时觉得跟图有关被吓到了。赛后才知道原来这么简单。
AC代码:
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>
using namespace std;
#define ll long long
struct Point
{
int num;
int id;
}p[1010];
bool cmp(Point a,Point b)
{
return a.num<b.num;
}
int main()
{
int T,n;
scanf("%d",&T);
int cas=1;
while(T--)
{
int ans=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&p[i].num);
p[i].id=i;
ans+=p[i].num;
}
sort(p+1,p+n+1,cmp);
int flag=1;
for(int i=1;i<=n;i++)
{
if(p[i].num>i-1)
{
flag=0;
}
}
if(flag==0)
printf("Case #%d: No\n",cas++);
else
{
printf("Case #%d: Yes\n%d\n",cas++,ans);
for(int i=2;i<=n;i++)
{
for(int j=1;j<=p[i].num;j++)
printf("%d %d\n",p[i].id,p[j].id);
}
}
}
return 0;
}