POJ 2421 Constructing Roads 最小生成树
来源:互联网 发布:移动138 137端口内部 编辑:程序博客网 时间:2024/05/22 10:50
来源:http://poj.org/problem?id=2421
题意:还是给你n个点,然后求最小生成树。特殊之处在于有一些点之间已经连上了边。
思路:对于已经有边的点,特殊标记一下,加边的时候把这些边的权值赋值为0即可。这样就可以既保证这些边一定存在,又保证了所求的结果正确。
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <string.h>#include <climits>using namespace std;#define CLR(arr,val) memset(arr,val,sizeof(arr))const int N = 110;int father[N];struct edge{int lp,rp,value;}ee[N*N];int map[N][N],flag[N][N],numedge,n;bool cmp(edge a,edge b){return a.value < b.value;}int find(int x){if(x == father[x])return father[x];return find(father[x]);}bool Union_Set(int x,int y){int fx = find(x);int fy = find(y);if(fx == fy){ return false;}else{ father[fx] = fy; return true;}}int kruskal(){sort(ee,ee+numedge,cmp);for(int i = 1; i <= n; ++i)father[i] = i;int sum = 0;for(int i = 0; i < numedge; ++i){int lx = ee[i].lp;int rx = ee[i].rp;if(Union_Set(lx,rx)){sum += ee[i].value;}}return sum;}int main(){//freopen("1.txt","r",stdin);while(scanf("%d",&n) != EOF){ CLR(flag,0);for(int i = 1; i <= n; ++i){ for(int j = 1; j <= n; ++j) scanf("%d",&map[i][j]);} int m,x,y;scanf("%d",&m);while(m--){ scanf("%d%d",&x,&y); flag[x][y] = 1;}numedge = 0;for(int i = 1; i < n; ++i){for(int j = i + 1; j <= n; ++j){if(flag[i][j]){ee[numedge].lp = i;ee[numedge].rp = j;ee[numedge].value = 0;numedge++;}else{ee[numedge].lp = i;ee[numedge].rp = j;ee[numedge].value = map[i][j];numedge++;}}}int ans = kruskal();printf("%d\n",ans);}return 0;}
- POJ 2421 Constructing Roads(最小生成树)
- POJ 2421 Constructing Roads 最小生成树
- POJ 2421 Constructing Roads 最小生成树
- POJ 2421 Constructing Roads 最小生成树
- POJ--2421--Constructing Roads【最小生成树】
- POJ 2421 -Constructing Roads -最小生成树
- 【最小生成树】POJ 2421 Constructing Roads
- POJ 2421 Constructing Roads 最小生成树
- Constructing Roads 【poj-2421】【最小生成树】
- POJ-2421 Constructing Roads (最小生成树)
- poj 2421 Constructing Roads prim最小生成树 基础!!!
- POJ-2421(最小生成树模版)(Constructing Roads )
- Poj 2421 Constructing Roads(Prim 最小生成树)
- POJ 2421 Constructing Roads(简单最小生成树)
- poj 2421 Constructing Roads 并查集+最小生成树
- poj-2421 Constructing Roads(最小生成树 Kruskal算法)
- poj 2421 Constructing Roads(最小生成树 kruskal算法)
- poj 2421 Constructing Roads(最小生成树))
- objective-c的总结
- 光流法的理解
- XAMPP和MYSQL使用
- PBRT 阅读 : 第一章
- 测试管理005:面对用户反馈的缺陷,测试人员能做些什么?
- POJ 2421 Constructing Roads 最小生成树
- 小知识
- PBRT阅读: 第九章 反射模型 第9.1-9.2节
- 谈谈无源滤波电路
- Visual Studio 2012和.NET Framework 4.5发布
- [Repaste] “The Best Programming Advice I Ever Got” with Rob Pike
- cas ajax登录方式跨域时session丢失问题解决
- dtree树形结构和连接数据库
- 什么是kRad(si)?