hdu4081 Qin Shi Huang's National Road System PRIM+dp
来源:互联网 发布:nginx跳转 域名不变 编辑:程序博客网 时间:2024/06/09 12:35
代码1:
#include<cstdio>#include<cstdlib>#include<cmath>#include<iostream>#include<vector>using namespace std;const int N = 1000 + 10;const double INF = 1.0*1e8;struct point{ double x,y; double val;}p[N];double get_dis(point a,point b){ return sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );}vector<int> ed[N];double map[N][N];int n,pre[N];double dis[N];double sum;void prim(){ int now=1; for(int i=1;i<=n;i++) ed[i].clear(); for(int i=1;i<=n;i++) dis[i] = 1.0*INF; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) if(now!=j && dis[j]>0 && map[now][j]>=0 && dis[j]>map[now][j]){ dis[j] = map[now][j]; pre[j] = now; } dis[now] = -1.0; int min_p=-1; double min_dis=1.0*INF; for(int j=1;j<=n;j++) if(dis[j]>0){ if(dis[j] < min_dis) { min_p = j; min_dis = dis[j]; } } if(min_p < 0) break; sum += min_dis; ed[min_p].push_back(pre[min_p]); ed[pre[min_p]].push_back(min_p); now = min_p; }}double dfs(int x,int fa){ double max_val=p[x].val; for(int i=0;i<ed[x].size();i++) { int j = ed[x][i]; if(j!=fa) { max_val = max( max_val,dfs(j,x) ); } } return max_val;}int main(){ int t; cin>>t; while(t--) { sum = 0; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].val); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j) map[i][j] = get_dis(p[i],p[j]); else map[i][j] = 0.0; prim(); double ans = 0; for(int i=1;i<=n;i++) for(int j=0;j<ed[i].size();j++) { int k = ed[i][j]; double s1 = dfs(i,k); double s2 = dfs(k,i); ans = max(ans, (s1+s2)/(sum - map[i][k])); } ans += 1e-8; printf("%.2lf\n",ans); } return 0;}
代码2:
#include<cstdio>#include<cstdlib>#include<cmath>#include<iostream>#include<vector>#include<cstring>using namespace std;const int N = 1000 + 10;const double INF = 1.0*1e8;struct point{ double x,y; double val;}p[N];double get_dis(point a,point b){ return sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y) );}vector<int> ed[N];double map[N][N];int n,pre[N],vis[N];double dis[N],maxcost[N][N];double sum;void prim(){ int now=1; for(int i=1;i<=n;i++) ed[i].clear(); for(int i=1;i<=n;i++) dis[i] = 1.0*INF; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) if(now!=j && dis[j]>0 && map[now][j]>=0 && dis[j]>map[now][j]){ dis[j] = map[now][j]; pre[j] = now; } dis[now] = -1.0; int min_p=-1; double min_dis=1.0*INF; for(int j=1;j<=n;j++) if(dis[j]>0){ if(dis[j] < min_dis) { min_p = j; min_dis = dis[j]; } } if(min_p < 0) break; sum += min_dis; ed[min_p].push_back(pre[min_p]); ed[pre[min_p]].push_back(min_p); now = min_p; }}void dfs(int s,int x){ for(int i=0;i<ed[x].size();i++){ int v = ed[x][i]; //printf("%d->%d\n",x,v); if(vis[v]) continue; vis[v] = 1; maxcost[s][v] = max(maxcost[s][v] , max(map[x][v],maxcost[s][x])); dfs(s,v); }}int main(){ int t; cin>>t; while(t--) { sum = 0; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf%lf%lf",&p[i].x,&p[i].y,&p[i].val); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i!=j) map[i][j] = get_dis(p[i],p[j]); else map[i][j] = 0.0; prim(); double ans = 0; //cout<<"hehe\n"; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) maxcost[i][j] = 0; for(int i=1;i<=n;i++){ memset(vis,0,sizeof(vis)); vis[i] = 1; maxcost[i][i] = 0; dfs(i,i); } //printf("orz\n"); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { ans = max(ans, (p[i].val+p[j].val)/(sum-maxcost[i][j]) ); } ans += 1e-8; printf("%.2lf\n",ans); } return 0;}
0 0
- hdu4081 Qin Shi Huang's National Road System PRIM+dp
- hdu4081 Qin Shi Huang's National Road System
- hdu4081 Qin Shi Huang's National Road System
- HDU4081 Qin Shi Huang's National Road System
- hdu4081---Qin Shi Huang's National Road System
- hdu4081 Qin Shi Huang's National Road System
- HDU4081 Qin Shi Huang's National Road System
- HDU4081 Qin Shi Huang's National Road System【prim最小生成树+枚举】
- HDU4081 Qin Shi Huang's National Road System(prim+次小生成树)
- hdu4081 Qin Shi Huang's National Road System MST+树形DP
- Qin Shi Huang's National Road System
- Qin Shi Huang's National Road System
- Qin Shi Huang's National Road System
- Qin Shi Huang's National Road System
- HDU4081(Qin Shi Huang's National Road System)(2011 Asia Beijing Regional Contest)
- hdu4081 Qin Shi Huang's National Road System 最小生成树+DFS★★
- HDU4081 Qin Shi Huang's National Road System 【次小生成树】
- hdu4081 Qin Shi Huang's National Road System(文件读入)
- servlet路径
- tomcat配置添加对JMX的支持
- Scala语言探究(一)
- Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(详细教程)
- MailCore2 详细使用
- hdu4081 Qin Shi Huang's National Road System PRIM+dp
- Android:文件下载和写入SD卡学习小结
- java中线程队列BlockingQueue的用法
- Linux系统调用-- recv/recvfrom/recvmsg函数详解
- 新手上路
- ctags用法
- C#中的Invoke
- CSS中的剪裁和遮罩
- 如何把PDF分割的步骤