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; }
相关文章推荐
- Hdu 1875 畅通工程再续 程序参考
- HDU-1863-畅通工程
- hdu 1863 畅通工程(Kruskal+并查集)
- hdu_1863 畅通工程
- hdu 1863 畅通工程 (并查集+最小生成树)
- HDU 1863 畅通工程 最小生成树
- Graph Theory NO.8 HDU_1863_畅通工程_最小生成树
- HDU 1863 畅通工程 (克鲁斯卡尔—最小生成树)
- hdu 1863 畅通工程(prim+kruskal)
- Hdu1863 - 畅通工程 - 最小生成树
- HDU1863 畅通工程---(最小生成树)
- HDU 1863 畅通工程
- HDU 1863 畅通工程(prime——最小生成树)
- hdu 1863 畅通工程 (最小生成树kruskal 算法)
- hdu1863-畅通工程 最小生成树的并查集实现方法
- HDU-#1863 畅通工程(Kruskal & Prim)
- hdu1863 畅通工程(最小生成树)
- HDU -- 1863 畅通工程 (mst)
- 图论——MST_Kruskal——畅通工程hdu_1863,hdu_1233畅通工程
- HDU 1863 畅通工程