标签:
input | output |
---|---|
4 2 1 4 0 2 4 3 2 0 5 2 4 5 0 1 3 2 1 0 |
3 |
#include <iostream> #include <cstring> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <time.h> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #define inf 10000000 #define mod 10000 typedef long long ll; using namespace std; const int N=6005; const int M=50000; int power(int a,int b,int c){int ans=1;while(b){if(b%2==1){ans=(ans*a)%c;b--;}b/=2;a=a*a%c;}return ans;} int a[N],w[N][N],vis[N],lowcost[N]; int n,m,k; void prim() { int sum=0;lowcost[1]=-1; for(int i=2;i<=n;i++){ lowcost[i]=w[1][i]; } for(int i=1;i<n;i++){ int minn=inf,k; for(int j=1;j<=n;j++){ if(lowcost[j]!=-1&&lowcost[j]<minn){ k=j;minn=lowcost[j]; } } sum+=minn; lowcost[k]=-1; for(int j=1;j<=n;j++){ lowcost[j]=min(lowcost[j],w[k][j]); } } printf("%d\n",sum); } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&w[i][j]); for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)w[a[i]][a[j]]=0; prim(); return 0; }
timus 1982 Electrification Plan(最小生成树)
标签:
原文地址:http://www.cnblogs.com/jianrenfang/p/5850950.html