poj 2253 最小生成树 kruskal
2012-08-14 20:24
525 查看
题意:
小青蛙(A)找女朋友(B)。途中有好多石头。你就跳吧。。。因此A到B有很多个路径。找这些路径中最短的一条。并把这条路径中两个石头距离最大的那段输出。
题解:
kruskal就行
小青蛙(A)找女朋友(B)。途中有好多石头。你就跳吧。。。因此A到B有很多个路径。找这些路径中最短的一条。并把这条路径中两个石头距离最大的那段输出。
题解:
kruskal就行
#include<stdio.h> #include<algorithm> #include<math.h> using namespace std; int pre[210]; struct point1 { int in,out; }t[210]; struct point2 { int s,e; double leth; }eg[150000]; int n; bool cmp(point2 a,point2 b) { return a.leth<b.leth; } int find(int w) { int now,root=w; while(root!=pre[root]) root=pre[root]; while(root!=pre[w]) { now=pre[w]; pre[w]=root; w=now; } return root; } int main() { int cas=1; while(scanf("%d",&n)&&n) { for(int i=0;i<n;i++) { scanf("%d%d",&t[i].in,&t[i].out); } for(int i=0;i<n;i++) pre[i]=i; int k=0; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) { eg[k].s=i; eg[k].e=j; eg[k++].leth=sqrt((double)((t[i].in-t[j].in)*(t[i].in-t[j].in)+(t[i].out-t[j].out)*(t[i].out-t[j].out))); } int kk=0; double sum; sort(eg,eg+k,cmp); for(int i=0;i<k;i++) { int x,y; if(find(0)!=find(1)) //看看A和B连通了么 { sum=eg[i].leth; x=find(eg[i].s);y=find(eg[i].e); if(x!=y) pre[y]=x; } else break; } printf("Scenario #%d\nFrog Distance = %.3f\n\n",cas++,sum); } return 0; }
相关文章推荐
- poj 2253 Frogger【最小生成树变形】【kruskal】
- POJ2253--Frogger--最小生成树Kruskal
- poj 1258 Agri-Net 最小生成树 kruskal
- POJ 1789 Truck History 【最小生成树&&Kruskal】
- POJ 1287:Networking(最小生成树Kruskal)
- 【POJ】2485--Highways(最小生成树 --Kruskal)
- POJ 1258 Agri-Net(最小生成树 Prim+Kruskal)
- poj 2421 Constructing Roads kruskal克鲁斯卡尔最小生成树
- POJ 1251 Jungle Roads (最小生成树 Kruskal克鲁斯卡尔算法)
- POJ 1251 Exponentiation(kruskal 最小生成树)
- POJ 1278 Agri-Net 最小生成树模板题(Prim 与 Kruskal)
- POJ - 1251 Jungle Roads (最小生成树Kruskal、并查集)
- POJ - 1287 Networking (最小生成树Kruskal)
- POJ 2253-Frogger(最小生成树-给定终点)
- POJ - 1751Highways最小生成树kruskal
- POJ 1258 Agri-Net (kruskal求最小生成树)
- POJ2349—最小生成树的Kruskal和Prim实现
- poj 3522 Slim Span (最小生成树kruskal)
- POJ1251 || ZOJ1406 kruskal求最小生成树
- poj 2485Highways(最小生成树 Kruskal)