2011年9月29日
摘要: UVA_10369题目的大概意思是,两个地点如果各有一个satellite channel,那么无论它们相隔多远都能通信,而如果任何一个没有satellitechannel的话,就只能靠radio通信,而radio通信的成本与距离D是成正比的,现在希望让所有地点都能直接或者间接通信,问最小的D是多少。这个题目实际上是在求一个最小生成森林的最长边,今天刚看到吉大模板上的最小生成森林,没想到立刻就用上了。最小生成树有两个特点,一个是保证了所有边的和是最小值,另一个是保证了所有边中的最大值最小。由于Kruskal算法每选中一条边就相当于把两个点集合并成了一个点集,最后用n-1条边连成了1个点集。那么 阅读全文
posted @ 2011-09-29 17:45 Staginner 阅读(420) 评论(0) 推荐(0) 编辑
摘要: UVA_10397 这个题目是一个求最小生成树的题目,只不过在求最小生成树之前要先用并查集对已经建好的边进行处理即可。#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>double x[1010],y[1010],w[1000010];int u[1000010],v[1000010],p[1010],r[1000010];int cmp(const void *_p,const void *_q){ int *p=(int *)_p; int *q=(int 阅读全文
posted @ 2011-09-29 16:46 Staginner 阅读(388) 评论(0) 推荐(0) 编辑
摘要: UVA_10048 这个题目是在求所有可达路径中最大值最小的一条路,并输出去其最大值。由题目特征,我们采用Floyd算法求解会方便一些。#include<stdio.h>#include<string.h>int f[110][110];int main(){ int i,j,k,n,t,C,S,Q,u,v,temp; t=0; while(scanf("%d%d%d",&C,&S,&Q)==3) { if(C==0) break; for(i=1;i<=C;i++) for(j=1;j<=C;j+... 阅读全文
posted @ 2011-09-29 16:16 Staginner 阅读(481) 评论(0) 推荐(0) 编辑
摘要: UVA_10034 首先根据点的坐标把所有边构造出来,然后直接用Kruskal算法求出最小生成树即可。具体思想可以参考刘汝佳白书的P201。#include<stdio.h>#include<string.h>#include<math.h>#include<stdlib.h>double x[110],y[110],w[10010];int u[10010],v[10010],p[110],r[10010];int cmp(const void *_p,const void *_q){ int *p=(int *)_p; int *q=(int 阅读全文
posted @ 2011-09-29 15:57 Staginner 阅读(401) 评论(0) 推荐(0) 编辑
摘要: UVA_567 由于最后查询的情况比较多,所以我们采用“一劳永逸”的floyd算法,直接算出任意两点间的最短路即可。#include<stdio.h>#include<string.h>int f[30][30];int main(){ int i,j,k,n,u,v,t; t=0; while(scanf("%d",&n)==1) { for(i=1;i<=20;i++) for(j=1;j<=20;j++) { if(i==j) f[i][j... 阅读全文
posted @ 2011-09-29 13:08 Staginner 阅读(292) 评论(0) 推荐(0) 编辑