HDU-1879-继续畅通工程
来源:互联网 发布:淘宝订购的应用 编辑:程序博客网 时间:2024/06/05 03:42
ACM模版
描述
题解
最小生成树模版题。
代码
#include <iostream>#include <cstring>#define mem(a, b) memset(a, b, sizeof(a))using namespace std;/* * Prim求MST * 耗费矩阵cost[][],初始化为INF,标号从0开始,0 ~ n-1 * 返回最小生成树的权值,返回-1表示原图不连通 */const int INF = 0x3f3f3f3f;const int MAXN = 110;bool vis[MAXN];int lowc[MAXN];int cost[MAXN][MAXN];// 修正cost(添加边)void updata(int x, int y, int v){ cost[x - 1][y - 1] = v; cost[y - 1][x - 1] = v; return ;}int Prim(int cost[][MAXN], int n) // 0 ~ n - 1{ int ans = 0; memset(vis, false, sizeof(vis)); vis[0] = true; for (int i = 1; i < n; i++) { lowc[i] = cost[0][i]; } for (int i = 1; i < n; i++) { int minc = INF; int p = -1; for (int j = 0; j < n; j++) { if (!vis[j] && minc > lowc[j]) { minc = lowc[j]; p = j; } } if (minc == INF) { return -1; // 原图不连通 } ans += minc; vis[p] = true; for (int j = 0; j < n; j++) { if (!vis[j] && lowc[j] > cost[p][j]) { lowc[j] = cost[p][j]; } } } return ans;}int main(int argc, const char * argv[]){ int N, M; int A, B, C, D; while (cin >> N && N != 0) { mem(cost, 0x3f); mem(vis, 0); M = N * (N - 1) / 2; for (int i = 0; i < M; i++) { scanf("%d%d%d%d", &A, &B, &C, &D); if (D) { updata(A, B, 0); } else { updata(A, B, C); } } int ans = Prim(cost, N); cout << ans << '\n'; } return 0;}
参考
《最小生成树(森林)》
0 0
- HDU 1879 继续畅通工程
- 继续畅通工程 hdu 1879
- hdu 1879 继续畅通工程
- HDU 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- HDU 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- HDU 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu - 1879 - 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879(继续畅通工程)
- hdu 1879 继续畅通工程
- oracle 11g client 和 PL/SQL developer的安装和配置
- 活动安排问题
- Problem 39 Integer right triangles (数学)
- VC6.0打开或者添加工程文件崩溃的解决方法
- 线程实现cp-r与ls-l
- HDU-1879-继续畅通工程
- 知识体系
- 在ls-l中利用execl添加cp-r进程
- 自定义控件-视觉特效
- 虚拟机下装cpu版的caffe
- 通达OA最新官方原版9.5.160913+和谐补丁+ 电脑微信钉钉多端登录 集成全功能组件
- Windows下Java调用BAT批处理不弹出cmd窗口
- JavaWeb:过滤器Filter
- 没有事业的女孩子很悲惨 - - - 一位老总的话!