- //建立了一个虚拟点
- #include
- using namespace std;
- const int N=310;
- int n;
- int g[N][N];
- int dist[N];
- bool st[N];
-
-
-
-
- int prim()
- {
- memset(dist,0x3f,sizeof dist);
- dist[0]=0; //虚拟的点0要设置为0
-
-
- int res=0;
-
- for(int i=0;i
1;i++) - {
- int t=-1;
- for(int j=0;j
1;j++) - {
- if(!st[j]&&(t==-1||dist[t]>dist[j]))
- {
- t=j;
- }
- }
-
- st[t]=true;
-
- if(i)
- {
- res+=dist[t];
- }
-
- for(int j=0;j
1;j++) - {
- dist[j]=min(dist[j],g[t][j]);
- }
-
- }
-
- return res;
-
- }
-
-
-
-
-
-
-
-
- int main()
- {
-
-
- cin>>n;
- memset(g,0x3f,sizeof g);
- //现在输入的是在第i矿井上建立发电站的费用
- //我们假设虚拟发电站是0号点
- for(int i=1;i<=n;i++)
- {
- int t;
- cin>>t;
- g[i][0]=g[0][i]=min(g[i][0],t); //无向边
-
- }
-
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- {
- int t;
- cin>>t;
- g[i][j]=min(g[i][j],t);
-
- }
-
- cout<
-
- return 0;
- }
-