标签:bool alt names play amp 直接 prime 最小 col
题意:有N个点,有些点已经连接了,然后求出所有点的连接的最短路径是多少。
思路:最小生成树的变形,有的点已经连接了,就直接把他们的权值赋为0,一样的就做最小生成树。
代码:
prime:
#include <cstdio> #include <iostream> using namespace std; #define maxn 100+5 #define inf 0x3f3f3f3f int maps[maxn][maxn]; bool vis[maxn]; int dis[maxn]; int n; int Prim() { for(int i=1;i<=n;i++) dis[i] = inf; int sum=0; dis[1] = 0; for(int i=1;i<=n;i++) { int tmp = inf,k=0; for(int j=1;j<=n;j++) { if(!vis[j]&&dis[j]<tmp) { tmp = dis[j]; k=j; } } vis[k] = true; sum+=tmp; for(int i=1;i<=n;i++) { if(!vis[i]&&dis[i]>maps[k][i]) dis[i] = maps[k][i]; } } return sum; } int main() { cin>>n; for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { cin>>maps[i][j]; } } int k; cin>>k; for(int i=0; i<k; i++) { int a,b; cin>>a>>b; maps[a][b]=maps[b][a] = 0; } cout<<Prim()<<endl; return 0; }
POJ2421 Constructing Roads【最小生成树】
标签:bool alt names play amp 直接 prime 最小 col
原文地址:http://www.cnblogs.com/darklights/p/7637580.html