【题目】
【分析】
看到题描是不是觉得特别吓人
其实这就是一道简单的签到题
扫描二维码关注公众号,回复:
3092780 查看本文章
这道题和图论没有太大关系,我们只要知道它是一个连通图就行了
我们按照每个城市的人数从大到小排序,每次都选出没选过的最大人数的城市,加进答案
由于每晚每个城市都会有 1 个人去乡下,所以第二天的答案减 1,第三天的答案减 1 再减 2,以此类推
最后在这些答案之中选出最大的就行了
【代码】
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 200005
using namespace std;
int a[N];
bool comp(int x,int y)
{
return x>y;
}
int main()
{
// freopen("eat.in","r",stdin);
// freopen("eat.out","w",stdout);
int n,m,i,x,y;
long long sum,num,maxn;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) scanf("%d",&a[i]);
//for(i=1;i<=m;++i) scanf("%d%d",&x,&y);
sort(a+1,a+n+1,comp);
sum=0,num=0,maxn=0;
for(i=1;i<=n;++i)
{
num+=i-1;
sum+=a[i];
maxn=max(maxn,sum-num);
}
printf("%lld",maxn);
// fclose(stdin);
// fclose(stdout);
return 0;
}