POJ2421 Constructing Roads最小生成树
Posted codeg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ2421 Constructing Roads最小生成树相关的知识,希望对你有一定的参考价值。
题意:有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最小生成树的主要内容,如果未能解决你的问题,请参考以下文章