代码:
#include <bits/stdc++.h>
using namespace std;
struct node{
priority_queue<long long,vector<long long>,greater<long long> > s;
}m[10005];
struct cz{
long long bs,bh;//第一个是边数,第二个是编号
friend bool operator<(cz n1,cz n2){
if(n1.bs==n2.bs){
return m[n1.bh].s.top()>m[n2.bh].s.top();
}
else return n1.bs<n2.bs;
}
};
priority_queue< cz > q;
long long js[10005];
int main(){
long long x,y;
long long s=0;
long long a,b;
cin>>x>>y;
if(x==1){
cout<<0;
return 0;
}
for(long long i=1;i<=y;i++){
cin>>a>>b;
js[a]++;
m[a].s.push(b);
}
for(long long i=2;i<=x;i++){
//cout<<js[i]<<" "<<i<<endl;
if(js[i]!=0) q.push((cz){js[i],i});
}
while(1){
if(q.empty()==true){
cout<<s;
break;
}
long long u=q.top().bs;
long long t=q.top().bh;
q.pop();
//cout<<t<<" "<<u<<endl;
//cout<<" "<<js[1]<<endl;
if(js[1]>u){
cout<<s;
break;
}
s+=m[t].s.top();
m[t].s.pop();
js[t]--;
js[1]++;
if(js[t]!=0) q.push((cz){js[t],t});
}
return 0;
}
找到hack了但不知道咋改