您的位置:首页 > 其它

Hdu 1863畅通工程 程序参考

2008-06-02 16:57 232 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1863

#include<iostream>

#include<vector>

using namespace std;

vector< vector<int> > mat;

vector<bool> visited;

vector<int> dist;

int minVertex(){

int next=-1;

for (int i=0;i<dist.size();i++)

if (!visited[i])

if (next==-1 || dist[i]<dist[next]) next=i;

return next;

}

int Prim(){

dist=mat[0];

fill(visited.begin(), visited.end(), false);

visited[0]=true;

int cost=0;

while(true){

int next = minVertex();

if (next == -1 || dist[next]==INT_MAX) break;

visited[next] = true;

cost += dist[next];

for (int i=0; i<mat.size(); i++)

if (visited[i]==false && mat[next][i]<dist[i]) dist[i]=mat[next][i];

}

for(int i=0;i<visited.size();i++)

if (visited[i]==false) return -1;

return cost;

}

bool run(){

int i,n,m,x,y,w;

scanf("%d %d",&m,&n);

if(m==0) return false;

mat.resize(n);

for(i=0; i<n; i++){

mat[i].resize(n);

fill(mat[i].begin(), mat[i].end(),INT_MAX);

}

for(i=0; i<m; i++){

scanf("%d%d%d",&x,&y,&w);

mat[x-1][y-1]=w;

mat[y-1][x-1]=w;

}

dist.resize(n);

visited.resize(n);

int t=Prim();

if (t==-1) printf("?/n");

else printf("%d/n",t);

return true;

}

int main(){

while(run());

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: