2018.09.08【校内模拟】T1 Eat (贪心)(坑题)

版权声明:转载请声明出处,谢谢配合。 https://blog.csdn.net/zxyoi_dreamer/article/details/82530998

这里写图片描述
这里写图片描述
这里写图片描述


解析:

好的读完题不要慌。。。这道题和图论半毛钱关系都没有。。。

这是今日份的签到题。

因为整个图是联通的,我们就只需要考虑求这样一个东西的最大值 i a i ( i 1 ) ,显然,这是一道贪心。。。

如果输入不保证联通,就加一个 B F S 或者 D F S ,(总算是扯到图论上了。。。)


代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define gc getchar
#define pc putchar
#define cs const

inline
ll getint(){
    re ll num=0;
    re char c=gc();
    while(!isdigit(c))c=gc();
    while(isdigit(c))num=(num<<1)+(num<<3)+(c^48),c=gc();
    return num;
}

inline
void outint(ll a){
    static char ch[23];
    if(a==0)pc('0');
    if(a<0)pc('-'),a=-a;
    while(a)ch[++ch[0]]=(a-a/10*10)^48,a/=10;
    while(ch[0])pc(ch[ch[0]--]);
}

int p[200003];
int n,m;

inline
bool cmp(cs int &a,cs int &b){
    return a>b;
}

int main(){
    n=getint();m=getint();
    for(int re i=1;i<=n;++i)p[i]=getint();
    sort(p+1,p+n+1,cmp);
    ll sum=0;
    for(int re i=1;i<=n;++i){
        if(p[i]<i-1)break;
        sum+=p[i]-(i-1);
    }
    outint(sum);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zxyoi_dreamer/article/details/82530998