40pts求调
查看原帖
40pts求调
1280778
ljh789789楼主2024/12/15 22:36

就错1个点

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1005;
int n,m,cnt[maxn],k,Max=-(1<<30);
LL ans;
struct num{
	int p,c;
	bool operator <(const num &b)const{return c>b.c;}
}a[maxn],b[maxn];
int read(){
	int ret=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}
	while(isdigit(ch))ret=(ret<<3)+(ret<<1)+(ch&15),ch=getchar();
	return ret*f;
}
int main(){
	n=read(),m=read();cnt[1]=m;
	for(int i=1;i<=m;i++){
		a[i].p=read(),a[i].c=read();
		if(a[i].p!=1)ans+=a[i].c,b[++k]=(num){a[i].p,a[i].c};
	}
	sort(b+1,b+1+k);
	for(int i=1;i<=k;i++){
		if(Max>=cnt[1]-1)break;
		if(cnt[b[i].p]+1>=cnt[1]-1)continue;
		cnt[b[i].p]++;cnt[1]--;ans-=b[i].c;Max=max(Max,cnt[b[i].p]);
	}
	printf("%lld\n",ans);
	return 0;
}
2024/12/15 22:36
加载中...