zoj_1203 Swordfish
2013-05-23 23:51
363 查看
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=203
//C++代码 #include<iostream> #include<iomanip> #include<queue> #include<cmath> using namespace std; struct Edge{ int u,v; double w; bool operator <(const Edge a) const{ return w>a.w; } }edge; int n,t=0,s[105]; priority_queue<Edge> pq; double dist(double x1,double y1,double x2,double y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } void Union(int x,int y){ s[y]=x; } int Find(int x){ if(s[x]<0) return x; return s[x]=Find(s[x]); } void Kruskal(){ int num=0,i; double sum=0; for(i=1;i<=n;i++) s[i]=-1; while(!pq.empty() && num<n-1){ edge=pq.top(); pq.pop(); if(Find(edge.u)!=Find(edge.v)){ Union(Find(edge.u),Find(edge.v)); sum+=edge.w; num++; } } if(++t!=1) cout<<endl; cout<<"Case #"<<t<<":"<<endl; cout<<"The minimal distance is: "<<fixed<<setprecision(2)<<sum<<endl; while(!pq.empty()) pq.pop(); } int main(){ while(cin>>n,n){ int i,j; double x[105],y[105]; for(i=1;i<=n;i++) cin>>x[i]>>y[i]; for(i=1;i<n;i++){ for(j=i+1;j<=n;j++){ edge.u=i; edge.v=j; edge.w=dist(x[i],y[i],x[j],y[j]); pq.push(edge); } } Kruskal(); } return 0; }
相关文章推荐
- zoj 1203 Swordfish
- zoj 1203 Swordfish
- ZOJ 1276 Optimal Array Multiplication Sequence
- ZOJ 3556 How Many Sets I 解题报告(数论)
- zoj2432 hdoj1423 最长公共上升子序列(LCIS)
- ZOJ 1259(Rails)
- 【简单】ZOJ1037 Gridland
- zoj 3693
- ZOJ 1028 Flip and Shift
- ZOJ 3827 简单数学推导+简单模拟
- Zojax.com
- ZOJ 3490 String Successor
- C语言线段树(5)____Count the Colors(zoj 1610)
- ZOJ Problem Set - 1488
- ZOJ 1002 Fire Net
- ZOJ-2095
- zoj 1119 SPF (tarjan求割点的联通分量数)
- ZOJ 题目3587 Marlon's String(KMP)
- zoj 1499 Increasing Sequences
- ZOJ-1284