hdu 1875 畅通工程再续

来源:互联网 发布:java编写计算器程序 编辑:程序博客网 时间:2024/06/04 19:51

模板走起

#include<iostream>#include<vector>#include<cmath>#include<cstdio> #define inf 1<<30#define maxn 105using namespace std;struct stu{int x,y;};stu mapp[maxn];int n; vector<int>root[maxn];int vaule[maxn][maxn];int visit[maxn];void prim(){int d[maxn];fill(d,d+maxn,inf);fill(visit,visit+maxn,0);double re=0;d[0]=0;int k=0;while(1){int v=-1;for(int i=0;i<n;i++){if(!visit[i]&&(v==-1||d[i]<d[v])) v=i;}if(v==-1||d[v]==inf) break;k++;re+=sqrt(d[v]);visit[v]=1;for(int i=0;i<root[v].size();i++){int x=root[v][i];d[x]=min(d[x],vaule[v][x]);}}if(k==n) printf("%.1lf\n",re*100);else cout<<"oh!"<<endl;}int main(){int t;cin>>t;while(t--){cin>>n;for(int i=0;i<maxn;i++) root[i].clear();for(int i=0;i<n;i++){cin>>mapp[i].x>>mapp[i].y;for(int j=0;j<i;j++){int l=pow(mapp[i].x-mapp[j].x,2)+pow(mapp[i].y-mapp[j].y,2);if(l<100||l>1000000) continue;root[i].push_back(j);root[j].push_back(i);vaule[i][j]=l;vaule[j][i]=l;}}prim();}return 0;}


0 0
原创粉丝点击