hdoj 3832 Earth Hour(最短路) £神魔★判官ぃ 2022-08-26 12:12 17阅读 0赞 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3832 题意:给出n个半径和圆心坐标已知的点,编号为1 -- n ,求连接1 ,2 , 3所需要的最少圆。 题目的难点在于转化,转化为枚举其他点到当前 3 个点的最小距离。即最短路径、 分析:给出的是圆的坐标,首先我们知道,如果一个圆和其他所有圆都没有交集,那么这个圆肯定不能连通其他圆,先排除这些,然后求剩下有交集的圆连通1,2,3,所需要最少的 圆,那么我们以圆的编号为点,任意两个有交集的圆建立一条长度为 1 的边,我们是不是就转化为求1,2,3三个点间的最短路,而求三个点间的最短路,我们可以画图试试是不是要 通过一个中间点求得的路径是最短的,那么问题得到了解决。 求最短路有很多算法,这个题目都可以,这里给出spfs实现: 代码: #include <cstdio> #include <vector> #include <iostream> #include <stack> #include <cstdio> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> using namespace std; const int inf = 0x3f3f3f3f; const int N = 300; struct Point { int x,y; int r; int num; }; Point a[N]; struct Node { int v,len; }; vector<Node> map[N]; int n; void spfa(int s,int dis[]) { int i; queue<int> q; for(i=0; i<N; i++) dis[i]=inf; dis[s]=0; q.push(s); while(!q.empty()) { int u=q.front(); q.pop(); for(i=0; i<map[u].size(); i++) { Node p=map[u][i]; if(dis[p.v]>dis[u]+p.len) { dis[p.v]=dis[u]+p.len; q.push(p.v); } } } } int main() { int dis1[N],dis2[N],dis3[N]; int T; scanf("%d",&T); while(T--) { for(int i=0;i<N;i++) map[i].clear(); scanf("%d",&n); memset(map,0,sizeof(map)); for(int i=0; i<n; i++) { scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].r); } for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { int dist1=(a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y); int dist2=(a[i].r+a[j].r)*(a[i].r+a[j].r); if(dist1<=dist2) { Node p; p.v=j; p.len=1; map[i].push_back(p); p.v=i; map[j].push_back(p); } } } spfa(0,dis1); spfa(1,dis2); spfa(2,dis3); int ans=-1; for(int i=0;i<n;i++) { if(dis1[i]<inf&&dis2[i]<inf&&dis3[i]<inf) ans=max(ans,n-(dis1[i]+dis2[i]+dis3[i]+1)); } if(ans==inf) ans=-1; printf("%d\n",ans); } return 0; }
相关 最短路 <table> <tbody> <tr> <td> <h2>最短路</h2> <strong>Time Limit: 5000/1000 MS (Java/O 向右看齐/ 2024年02月18日 22:54/ 0 赞/ 73 阅读
相关 hdoj 3832 Earth Hour(最短路) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3832 题意:给出n个半径和圆心坐标已知的点,编号为1 -- n , £神魔★判官ぃ/ 2022年08月26日 12:12/ 0 赞/ 18 阅读
相关 最短路 \[hdu 1599\] ([http://acm.hdu.edu.cn/showproblem.php?pid=1599][http_acm.hdu.edu.cn_showp 红太狼/ 2022年08月04日 08:28/ 0 赞/ 192 阅读
相关 C--最短路 Problem Description 给出一个带权无向图,包含n个点,m条边。求出s,e的最短路。保证最短路存在。 Input 多组输入。 对于每组数据。 以你之姓@/ 2022年07月12日 08:26/ 0 赞/ 156 阅读
相关 最短路 队列+松弛操作 读取队头顶点u,并将队头顶点u出队(记得消除标记);将与点u相连的所有点v进行松弛操作,如果能更新估计值(即令d\[v\]变小),那么就更新,另外,如果 忘是亡心i/ 2022年06月11日 04:06/ 0 赞/ 237 阅读
相关 最短路 一下模板均已通过HDUOJ 2544 程序设计竞赛队空间和时间复杂度要求都很高,所以朴素的Dijkstra[算法][Link 1]无论时间还是空间,效率都很低。 所以,一般 淡淡的烟草味﹌/ 2022年06月09日 04:28/ 0 赞/ 275 阅读
相关 HDOJ3790”最短路径问题“ 原题链接:[http://acm.hdu.edu.cn/showproblem.php?pid=3790][http_acm.hdu.edu.cn_showproblem.ph 淩亂°似流年/ 2022年05月19日 02:20/ 0 赞/ 199 阅读
相关 最短路 最短路 典型用途:交通网络的问题——从甲地到乙地之间是否有公路连通?在有多条通路的情况下,哪一条路最短? 交通网络用有向网来表示:顶点——表示城市,弧——表示两个城 淡淡的烟草味﹌/ 2022年03月18日 12:35/ 0 赞/ 289 阅读
相关 最短路 Floyed [http://codevs.cn/problem/1077/][http_codevs.cn_problem_1077] include<cstdi ﹏ヽ暗。殇╰゛Y/ 2021年11月18日 00:30/ 0 赞/ 328 阅读
相关 最短路 复习下图论算法 1. 邻接表的Dijkstra ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] / 冷不防/ 2021年11月02日 14:24/ 0 赞/ 489 阅读
还没有评论,来说两句吧...