[zoj解题] 1203
#include <stdio.h>
#include <stdlib.h>
#include <math.h> #define MAXN 100
#define MAXM 9900 int N, M; struct Edge {
int u,v;
double weight;
} edge[MAXM]; int vertexs[MAXN];
int parents[MAXN];
double xs[MAXN];
double ys[MAXN]; int edge_cmp(const void* a, const void* b) {
return (((struct Edge*)a)->weight - ((struct Edge*)b)->weight > 0) ? 1:-1;
} int parents_find(int x) {
int s;
for(s = x; parents[s] >= 0; s = parents[s]){
;
}
return s;
} void parents_union(int r1, int r2) {
int s1, s2;
int tmp;
s1 = parents_find(r1);
s2 = parents_find(r2);
tmp = parents[s1] + parents[s2];
if(parents[s1] < parents[s2]) {
parents[s2] = s1;
parents[s1] = tmp;
}
else {
parents[s1] = s2;
parents[s2] = tmp;
}
} void kruskal(int count) {
double sum_weight = 0;
int num = 0;
int i, u, v;
for(i = 0; i < M; i++) {
u = edge[i].u;
v = edge[i].v;
if(parents_find(u) != parents_find(v)) {
num ++;
sum_weight += edge[i].weight;
parents_union(parents_find(u), parents_find(v));
}
if(num == N - 1) {
break;
}
}
printf("Case #%d:\n", count);
printf("The minimal distance is: %.2lf\n", sum_weight);
} int main() {
int i, j;
int index;
double weight;
int count = 1;
int flag = 1; while(1) {
scanf("%d", &N);
if(N == 0) {
break;
}
if(flag == 0) {
printf("\n");
}
flag = 0;
/* init */
for(i = 0; i < N; i++) {
vertexs[i] = i;
parents[i] = -1;
} for(i = 0; i < N; i++) {
scanf("%lf%lf", &xs[i], &ys[i]);
} index = 0;
for(i = 0; i < N; i++) {
for(j = i + 1; j < N; j++) {
weight = sqrt((xs[i] - xs[j])*(xs[i] - xs[j]) + \
(ys[i] - ys[j])*(ys[i] - ys[j]));
edge[index].u = i;
edge[index].v = j;
edge[index].weight = weight;
index ++;
}
}
M = index;
/* sort */
qsort(edge, M, sizeof(edge[0]), edge_cmp);
kruskal(count);
count ++;
} return 0;
}
有kruskal改的,格式很重要
[zoj解题] 1203的更多相关文章
- ZOJ Problem Set - 1025解题报告
ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...
- ZOJ 1093 Monkey and Banana (LIS)解题报告
ZOJ 1093 Monkey and Banana (LIS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- ZOJ 1203 Swordfish 旗鱼 最小生成树,Kruskal算法
主题链接:problemId=203" target="_blank">ZOJ 1203 Swordfish 旗鱼 Swordfish Time Limit: 2 ...
- 【九度OJ】题目1203:IP地址 解题报告
[九度OJ]题目1203:IP地址 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1203 题目描述: 输入一个ip地址串,判断是否合 ...
- 重拾ZOJ 一周解题
ZOJ 2734 Exchange Cards 题目大意: 给定一个值N,以及一堆卡片,每种卡片有一个值value和数量number.求使用任意张卡片组成N的方式. 例如N = 10 ,cards(1 ...
- ZOJ 1203 Swordfish
题目: There exists a world within our world A world beneath what we call cyberspace. A world protected ...
- ZOJ 1203 Swordfish(Prim算法求解MST)
题目: There exists a world within our world A world beneath what we call cyberspace. A world protected ...
- 【解题报告】牡丹江现场赛之ABDIK ZOJ 3819 3820 3822 3827 3829
那天在机房做的同步赛,比现场赛要慢了一小时开始,直播那边已经可以看到榜了,所以上来就知道A和I是水题,当时机房电脑出了点问题,就慢了好几分钟,12分钟才A掉第一题... A.Average Score ...
- ACM解题之(ZOJ 1094) Matrix Chain Multiplication
题目来源: 点击打开链接 题目翻译: 矩阵乘法问题是动态规划的典型例子. 假设你必须评估一个表达式,如A * B * C * D * E,其中A,B,C,D和E是矩阵.由于矩阵乘法是关联的,乘法运算的 ...
随机推荐
- oracle数据库的一次异常起停处理。
在重启数据库的时候,忘记把一个应用关停了,想起来的时候,就ctrl+c,把数据库shutdown immediate 给强制停下了,把该应用再停止,然后shutdown immdiate,这时候数据报 ...
- java数据结构之链表的实现
这个链表的内部是使用双向链表来表示的,但是并未在主函数中进行使用 /** * 链表 * 2016/4/26 **/ class LinkList{ Node head = new Node(); No ...
- 快学Scala-第三章 数组相关操作
知识点: 1.定长数组 Array val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new Array[String](10) / ...
- PullToRefreshListView上拉加载、下拉刷新
说明:此项目使用studio完成的.需要导入library作为依赖,使用了xuitls获得网络请求.使用Pull解析了XML eclipse中的项目: //注意:此刷新功能是使用的第三方的PullTo ...
- linux进程、管道和重定向
1.shell先后使用fork和exec系统调用来执行一个外部命令. 2.在linux系统中,有三个文件会被内核自动打开,分别是stdin.stdout.stderr. 3.进程的属性相关命令: 查看 ...
- java 多线程机制
Example12_1.java public class Example12_1 { public static void main(String args[]) { //主线程 SpeakElep ...
- FZU 1912 Divisibility by Thirty-six(整除问题+字符串维护+贪心)
这个整除36的与整除45的完全一样,就是被4整除的有点多,但都是两位数,所以枚举后面两位就可以了. #include <stdio.h> #include <string.h> ...
- 滑轮关节(b2PulleyJoint)
package{ import Box2D.Collision.b2AABB; import Box2D.Collision.b2RayCastInput; import Box2D.Collisio ...
- 解析GenericOptionsParser
hadoop源代码分析(4)-org.apache.hadoop.util包-GenericOptionsParser类[原创] 一 准备 hadoop版本:1.0.3,GenericOptio ...
- SlidingMenu的使用,结合Fragment(eclipse环境)
首先下载SlidingMenu,有Library和Sample,然后在自己的项目中引入类库(引入智慧北京工作空间的Library),然后V4包会发生冲突,删掉自己项目Libs目录下的V4包即可 侧滑布 ...