HDU 4081 Qin Shi Huang's National Road System
最小生成树+枚举+DFS
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<algorithm> using namespace std; const double INF=0x7FFFFFFF; const int maxn=1000+10; int T,n,tot; double cost,Max1,Max2,ans; struct Point { double x,y; double val; }p[maxn]; struct Edge { int u,v; double dis; }e[maxn*maxn]; int Father[maxn]; vector<int>Tree[maxn]; int flag[maxn*maxn]; int x[maxn]; bool cmp(const Edge&a,const Edge&b) { return a.dis<b.dis; } void init() { tot=0;cost=0;ans=-INF; memset(flag,0,sizeof flag); for(int i=0;i<=n;i++) Father[i]=i; for(int i=0;i<=n;i++) Tree[i].clear(); } int Find(int x) { if(x!=Father[x]) Father[x]=Find(Father[x]); return Father[x]; } double Dis(int a,int b) { return sqrt((p[a].x-p[b].x)*(p[a].x-p[b].x)+(p[a].y-p[b].y)*(p[a].y-p[b].y)); } void dfs1(int now) { x[now]=1; if(p[now].val>Max1) Max1=p[now].val; for(int i=0;i<Tree[now].size();i++) { int id=Tree[now][i]; if(flag[id]==1) { if(e[id].u==now&&x[e[id].v]==0) dfs1(e[id].v); else if(e[id].v==now&&x[e[id].u]==0) dfs1(e[id].u); } } } void dfs2(int now) { x[now]=1; if(p[now].val>Max2) Max2=p[now].val; for(int i=0;i<Tree[now].size();i++) { int id=Tree[now][i]; if(flag[id]==1) { if(e[id].u==now&&x[e[id].v]==0) dfs2(e[id].v); else if(e[id].v==now&&x[e[id].u]==0) dfs2(e[id].u); } } } int main() { scanf("%d",&T); while(T--) { scanf("%d",&n); init(); 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=i+1;j<=n;j++) { e[tot].u=i; e[tot].v=j; e[tot].dis=Dis(i,j); tot++; } } sort(e,e+tot,cmp); for(int i=0;i<tot;i++) { int fx=Find(e[i].u); int fy=Find(e[i].v); if(fx!=fy) { Father[fx]=fy; cost=cost+e[i].dis; Tree[e[i].u].push_back(i); Tree[e[i].v].push_back(i); flag[i]=1; } } for(int i=0;i<tot;i++) { if(flag[i]) { memset(x,0,sizeof x); flag[i]=0; Max1=-INF; Max2=-INF; dfs1(1); for(int i=1;i<=n;i++) if(!x[i]) { dfs2(i); break; } if((1.0*Max1+1.0*Max2)/(cost-e[i].dis)>ans) ans=(1.0*Max1+1.0*Max2)/(cost-e[i].dis); flag[i]=1; } } printf("%.2lf\n",ans); } return 0; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!
· 【译】Visual Studio(v17.13)中新的调试和分析特性
· Draw.io:你可能不知道的「白嫖级」图表绘制神器