社区讨论
80分代码全挂
P14362[CSP-S 2025] 道路修复参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhpi1dgc
- 此快照首次捕获于
- 2025/11/08 07:41 3 个月前
- 此快照最后确认于
- 2025/11/08 07:41 3 个月前
CPP
#include<bits/stdc++.h>
#define int long long
#define fup(a,b,c,d) for(int a=b;a<=c;a+=d)
using namespace std;
const int N=3e6+10;
const int INF=0x3f3f3f3f;
int n,m,k,ans=INF;
int fa[N],val[N];
struct Edge{
int u,v,w;
bool operator<(const Edge &rhs)const{
return w<rhs.w;
}
};
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(int x,int y){
x=find(x);y=find(y);
if(x==y)return ;
fa[x]=y;
}
Edge e[N],c[N];
int a[12][N];
signed main(){
// freopen("road.in","r",stdin);
// freopen("road.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m>>k;
fup(i,1,m,1)cin>>e[i].u>>e[i].v>>e[i].w;
fup(i,1,k,1){
cin>>val[i];
fup(j,1,n,1)cin>>a[i][j];
}
fup(s,0,(1<<k)-1,1){
int top=m,tot=n,cnt=0;
fup(i,1,m,1)c[i]=e[i],fa[i]=i;
fup(i,1,k,1){
if((s&(1<<(i-1)))){
fa[++tot]=tot;cnt+=val[i];
fup(j,1,n,1)c[++top]={tot,j,a[i][j]};
}
}
sort(c+1,c+1+top);
fup(i,1,top,1){
if(find(c[i].u)==find(c[i].v))continue;
merge(c[i].u,c[i].v);cnt+=c[i].w;
}
ans=min(ans,cnt);
}
cout<<ans;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...