1 条题解

  • 0
    @ 2024-12-28 15:13:20

    最小生成树的模板题目,贴一个模板。

    #include<iostream>
    #include<cstring>
    using namespace std;
    const int maxn=105;
    const int inf=0x3f3f3f3f; 
    double m[maxn][maxn],low[maxn];
    bool vis[maxn];
    int n;
    
    int prim(int s){
    	memset(vis,false,sizeof(vis));
    	for(int i=1;i<=n;i++)
    		low[i]=m[s][i];
    	vis[s]=1;
    	int sum=0;
    	int t;
    	for(int i=1;i<n;i++){//执行n-1次 
    		int min=inf;
    		for(int j=1;j<=n;j++){//找最小 
    			if(!vis[j]&&low[j]<min){
    				min=low[j];
    				t=j;
    			}
    		}
    		sum+=min;
    		vis[t]=1;
    		for(int j=1;j<=n;j++){//更新
    			if(!vis[j]&&low[j]>m[t][j])
    				low[j]=m[t][j];
    		}	 
    	}
    	return sum;
    }
    
    int main(){
    	int q,a,b;
    	while(cin>>n){
    		for(int i=1;i<=n;i++)
    			for(int j=1;j<=n;j++)
    				cin>>m[i][j];
    		cin>>q;
    		while(q--){
    			cin>>a>>b;
    			m[a][b]=m[b][a]=0;
    		}
    		cout<<prim(1)<<endl;
    	}
    	return 0;
    }
    • 1

    信息

    ID
    180
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    (无)
    递交数
    9
    已通过
    2
    上传者