P2541 [USACO16DEC] Robotic Cow Herd P
其实就是 P6646 [CCO 2020] Shopping Plans 中 \(m>1\) 的部分,完全相同。
Takanashi Rikka
#include<bits/stdc++.h>
using namespace std;
#define fin(x) freopen(#x".in","r",stdin)
#define fout(x) freopen(#x".out","w",stdout)
#define fr(x) fin(x),fout(x);
#define Fr(x,y) fin(x),fout(y)
#define INPUT(_1,_2,FILE,...) FILE
#define IO(...) INPUT(__VA_ARGS__,Fr,fr)(__VA_ARGS__)
#define mp make_pair
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define il inline
#define cfast ios::sync_with_stdio(false);cin.tie(0),cout.tie(0)
#define ll long long
#define ull unsigned long long
#define intz(x,y) memset((x),(y),sizeof((x)))
inline void cmx(auto &x,ll y){if(y>x)x=y;}
inline void cmn(auto &x,ll y){if(y<x)x=y;}
inline int max(vector<int>w){int res=-1e9;for(int i:w)cmx(res,i);return res;}
#define pcount(x) __builtin_popcount(x)
const int N=1e5+5;
#define int ll
struct state{
int x,k,sum;
friend bool operator<(state x,state y){
return x.sum>y.sum;
}
};priority_queue<state>dl;
int len[N],id[N];vector<int>w[N];
void UesugiErii(){
int n,k,sum=0,ans=0;cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>len[i];w[i].resize(len[i]+1);
for(int j=1;j<=len[i];j++)cin>>w[i][j];
sort(w[i].begin(),w[i].end());
sum+=w[i][1],id[i]=i;
if(len[i]<2)w[i].pb(1e9);
}
sort(id+1,id+1+n,[&](int x,int y){return w[x][2]-w[x][1]<w[y][2]-w[y][1];});
dl.push({1,1,sum});
while(!dl.empty()&&(k--)){
state u=dl.top();dl.pop();
ans+=u.sum;
if(u.x+1<=n&&u.k>1)dl.push({u.x+1,2,u.sum-w[id[u.x+1]][1]+w[id[u.x+1]][2]});
if(u.x+1<=n&&u.k==2)dl.push({u.x+1,2,u.sum-w[id[u.x+1]][1]+w[id[u.x+1]][2]-w[id[u.x]][2]+w[id[u.x]][1]});
if(u.k+1<=len[id[u.x]])dl.push({u.x,u.k+1,u.sum-w[id[u.x]][u.k]+w[id[u.x]][u.k+1]});
}
cout<<ans;
}
signed main(){
//IO();
cfast;
int _=1;//cin>>_;
for(;_;_--)UesugiErii();
return 0;
}

浙公网安备 33010602011771号