优先队列求调,40pts
查看原帖
优先队列求调,40pts
918478
All_Wrong_Answer楼主2024/12/14 10:56

提交记录

代码:

#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了但不知道咋改

2024/12/14 10:56
加载中...