HDU 5813(贪心,构造,多校)

来源:互联网 发布:淘宝玩具店铺简介 编辑:程序博客网 时间:2024/06/11 07:37

题目链接:HDU 5813

题意:给一个有向图,n个点,接下来n个数表示与第i个点直接或间接相连的点的个数。

解题思路:官方给出的题解说的很清楚,刚开始还以为是跟如论有关的东西,还是自己太天真了。直接贪心就好,好水的一道题,比赛时觉得跟图有关被吓到了。赛后才知道原来这么简单。
这里写图片描述

AC代码:

#include <iostream>#include <stdio.h>#include <cmath>#include <cstring>#include <algorithm>#include <queue>#include <map>using namespace std;#define ll long longstruct 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;}
0 0
原创粉丝点击