社区讨论

爆零求调

P2792[JSOI2008] 小店购物参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo10goy6
此快照首次捕获于
2023/10/22 13:11
2 年前
此快照最后确认于
2023/11/02 12:40
2 年前
查看原帖
随便写的估计每一处对
CPP
#include<bits/stdc++.h>
using namespace std;
int n,k,f[51];
double cnt=0;
bool vis[51]={0};
struct ddd{
	double c;
	int m;
}a[51];
struct dd{
	int A,B;
	double P;
}b[501];
int check(int l){
	if(f[l]==l)return l;
	return f[l]=check(f[l]);
}
bool cmp(dd l,dd p){
	return l.P*(a[l.B].c-a[l.B].m)>p.P*(a[p.B].c-a[p.B].m);
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i].c>>a[i].m;
	cin>>k;
	for(int i=0;i<k;i++)cin>>b[i].A>>b[i].B>>b[i].P;
	sort(b,b+k,cmp);
	for(int i=1;i<=k;i++)f[i]=i;
	for(int i=0;i<k;i++){
		int u=check(b[i].A),v=check(b[i].B);
		if(u==v)continue;
		f[u]=v;
		cnt+=(a[b[i].B].m*b[i].P);
		vis[b[i].B]=1;
	}
	for(int i=1;i<=n;i++)if(vis[i]==0)cnt+=(a[i].c*a[i].m);
	printf("%.2f",cnt);
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...