1 条题解
-
0
最小生成树的模板题目,贴一个模板。
#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
- 上传者