社区讨论

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 条回复,欢迎继续交流。

正在加载回复...