社区讨论
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 条回复,欢迎继续交流。
正在加载回复...