社区讨论

S T2 弱化版 WA,求调

UVA1151买还是建 Buy or Build参与者 2已保存回复 3

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mhphxdmb
此快照首次捕获于
2025/11/08 07:37
4 个月前
此快照最后确认于
2025/11/09 02:28
4 个月前
查看原帖
P14362 AC 代码改造,已注意空行。
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1005,M=1e6+5,K=10;
int n,m,k,X[N],Y[N],pt[K],c[K],a[K][N],fa[N*K],cnte,mm,ans,res;
bool vis[K];
struct node{
	int u,v,w;
}e[M],g[M+N*K];
bool cmp(node a,node b){
	return a.w<b.w;
}
inline int find(int x){
	return fa[x]^x?fa[x]=find(fa[x]):x;
}
inline int dist(int i,int j){
	return (X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j]);
}
inline void mian(){
	cin>>n>>k;m=n*(n-1)/2;
	cnte=mm=ans=res=0;
	for(int i=1;i<=n;i++)fa[i]=i;
	for(int i=1;i<=k;i++){
		cin>>pt[i]>>c[i];
		for(int j=1;j<=pt[i];j++){
			cin>>a[i][j];g[++mm]={n+i,a[i][j],0};
		}
	}
	for(int i=1;i<=n;i++){
		cin>>X[i]>>Y[i];
	}
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			e[++cnte]={i,j,dist(i,j)};
		}
	}sort(e+1,e+1+m,cmp);cnte=0;
	for(int i=1,u,v;i<=m;i++){
		u=e[i].u,v=e[i].v;u=find(u),v=find(v);
		if(u==v)continue;fa[u]=v;cnte++;
		ans+=e[i].w;g[++mm]=e[i];
		if(cnte+1==n)break;
	}
	for(int sum=1;sum<(1<<k);sum++){
		int tmp=sum,cnt=mm,cntp=n;res=0;
		for(int i=0;i<k;i++){
			if((tmp>>i)&1){
				res+=c[i+1];cntp++;vis[i+1]=1;
			}
		}cnte=0;
		for(int i=1;i<=n*k+n;i++)fa[i]=i;
		for(int i=1,u,v;i<=cnt;i++){
			u=g[i].u,v=g[i].v;
			if(u>n&&!vis[u-n])continue;
			u=find(u),v=find(v);
			if(u^v)fa[u]=v,cnte++,res+=g[i].w;
			if(cnte+1==cntp)break;
		}ans=min(ans,res);
		for(int i=1;i<=k;i++)vis[i]=0;
	}cout<<ans;
}int TT;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>TT;while(TT--)mian(),(TT)&&(cout<<"\n\n");
	return 0;
}

回复

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

正在加载回复...