1 条题解

  • 1
    @ 2026-8-31 15:55:18
    #include <bits/stdc++.h>
    using namespace std;
    #define int long long
    const int mod=998244353;
    const int N=1e6+10;
    int n,m,k;
    int father[N];
    int answer=1e18+10,tot;
    int c[N];
    struct node{
    	int u,v,w;
    }a[N];
    void build(){
    	for(int i=1;i<=n;i++){
    		father[i]=i;
    	}
    }
    bool cmp(node x,node y){
    	return x.w<y.w;
    }
    int find(int i){
    	if(father[i]!=i){
    		father[i]=find(father[i]);
    	}
    	return father[i];
    }
    void Union(int x,int y){
    	father[find(x)]=find(y);
    }
    bool vis[100];
    void kruskal(){
    	build();
    	sort(a+1,a+m+1,cmp);
    	for(int i=1;i<=m;i++){
    		int x=a[i].u;
    		int y=a[i].v;
    		x=find(x);
    		y=find(y);
    		if(x!=y){
    			tot++;
    			Union(x,y);
    			a[tot]=a[i];
    		}
    		if(tot==n-1){
    			break;
    		}
    	}
    }
    void solve(){
        cin>>n>>m>>k;
        for(int i=1;i<=m;i++){
    		cin>>a[i].u>>a[i].v>>a[i].w;
    	}
    	kruskal();
    	for(int i=1;i<=k;i++){
    		cin>>c[i];
    		for(int j=1;j<=n;j++){
    			int w;
    			cin>>w;
    			a[++tot]={n+i,j,w};
    		}
    	}
    	sort(a+1,a+tot+1,cmp);
    	for(int s=0;s<(1<<k);s++){
    		int sum=0;
    		int num=0;
    		for(int i=1;i<=k;i++){
    			if(s>>(i-1)&1){
    				num++;
    				vis[i]=1;
    				sum+=c[i];
    			}else{
    				vis[i]=0;
    			}
    		}
    		for(int i=1;i<=n+k;i++){
    			father[i]=i;
    		}
    		int to=0;
    		for(int i=1;i<=tot;i++){
    			int x=a[i].u;
    			int y=a[i].v;
    			if(x>n&&!vis[x-n])	continue;
    			x=find(x);
    			y=find(y);
    			if(x!=y){
    				to++;
    				Union(x,y);
    				sum+=a[i].w;
    				if(to==n+num-1)	break;
    			}
    		}
    		answer=min(answer,sum);
    	}
    	cout<<answer;
    }
    signed main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int T=1;
        //cin>>T;
        while(T--) solve();
        return 0;
    }
    
    • 1

    信息

    ID
    660
    时间
    2000ms
    内存
    512MiB
    难度
    提高
    标签
    递交数
    1
    已通过
    1
    上传者