poj 1251 Jungle Roads(最小生成树kruscal+!学长秘授究极无敌新版结构体排序)
来源:互联网 发布:centos 创建文件夹 编辑:程序博客网 时间:2024/05/19 20:23
类似求城市之间的边权和最小的题目。
最小生成树模板题,一览无余。
虽说是最小生成树,但是还有几个细节的地方需要注意。
第1点:
一个结构体排序,直接在结构体里用一个运算符重载来做的,代码很清晰,学长教的啦啦啦啦。
代码:
struct edge{ int x, y, w; edge(int x=0, int y=0, int w=0)/*:x(x),y(y),w(w)*/{} bool operator < (const edge &b)const { return w < b.w; }}e[100];//之后调用 sort(e + 1, e + M +1);
如果要从大到小排,直接把 w < b.w 改成 w > b.w 就行了
第2点:
输入输出的选择,开始的时候用scanf 程序一直 运不起来,所以改换了c++,在需要输入类似字符串,字符的时候,流式输入还是挺好用的。
第3点:
开始的时候想用map容器来关联A B C ...与1 2 3...的,但是想想毕竟只有一个字母,直接用字母-ASCII码(A是65,标记A为1,则 A为 ‘A’-64)。
代码:
#include<stdio.h>#include<iostream>#include<algorithm>using namespace std;int N, M;int fa[100];struct edge{ int x, y, w; edge(int x=0, int y=0, int w=0)/*:x(x),y(y),w(w)*/{} bool operator < (const edge &b)const { return w < b.w; }}e[100];/*int cmp(const void *va, const void *vb){ edge *a, *b; a = (edge*)va; b = (edge*)vb; if(a -> w > b -> w) return 1; if(a-> w < b-> w) return -1; return 0;}*/int find(int x){ if(x == fa[x]) return x; else return fa[x] = find(fa[x]);}int kruscal(){ int ans = 0; sort(e + 1, e + M +1); int cnt = N; for(int i = 1; i <= N; i++) fa[i] = i; for(int i = 1; i<=M; i++) { int t1 = find(e[i].x); int t2 = find(e[i].y); if(t1 != t2) { fa[t1] = t2; ans += e[i].w; if(cnt == 1) break; } } return ans;}int main(){ #ifdef LOCAL freopen("in.txt","r",stdin); #endif // LOCAL*/ while(scanf("%d", &N)!=EOF) { getchar(); if(N == 0) break; M = 1; char tmpx, tmpy; int k, tmpw; for(int i = 0; i < N-1; i++) { cin>>tmpx>>k; //scanf("%c%d", &tmpx, &k); //getchar(); while(k--) { //getchar(); //scanf("%c%d", &tmpy, &tmpw); //getchar(); cin>>tmpy>>tmpw; e[M].x = tmpx - 64; e[M].y = tmpy - 64; e[M].w = tmpw; M++; } } int s = kruscal(); printf("%d\n", s); } return 0;}
0 0
- poj 1251 Jungle Roads(最小生成树kruscal+!学长秘授究极无敌新版结构体排序)
- POJ 1251 Jungle Roads 最小生成树
- poj 1251 Jungle Roads ---最小生成树
- Poj 1251 Jungle Roads -- 最小生成树
- poj 1251 Jungle Roads 最小生成树
- POJ 1251 Jungle Roads(最小生成树)
- poj 1251 Jungle Roads 最小生成树
- Jungle Roads - POJ 1251 最小生成树
- POJ-1251 Jungle Roads(最小生成树)
- poj 1251 Jungle Roads(最小生成树)
- POJ 1251 Jungle Roads 最小生成树
- [最小生成树] poj 1251 Jungle Roads
- poj 1251 Jungle Roads 最小生成树
- poj 1251 Jungle Roads(最小生成树)
- POJ 1251 Jungle Roads 【最小生成树】
- POJ 1251 Jungle Roads 最小生成树
- Jungle Roads 【poj-1251】 【最小生成树】
- 【POJ 1251】Jungle Roads(最小生成树)
- 网页图片如何选择使用GIF格式或JPG格式
- 抖动效果
- roid imageView图片按比例缩放
- nyoj-556-最大公约数
- Android常见控件使用经验之——Activity
- poj 1251 Jungle Roads(最小生成树kruscal+!学长秘授究极无敌新版结构体排序)
- sqlite之我见--简单介绍与基本操作 .
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- html语义化的一些了解
- 高性能 Socket 组件 HP-Socket v3.2.1-RC2 发布
- jBPM中的(Task)任务有个人任务和组任务。
- Menu
- IOS学习之路五(代码实现UITableView)
- cookie、session及实现记住密码,自动登录