题解~
2026-04-15 19:28:22
发布于:北京
5阅读
0回复
0点赞
我的题解
个人认为没有DFS的必要。
由于数据很小,所以不需要担心被卡,O(n3)绰绰由余。
第一遍二重循环存边,第二遍Floyd,第三遍统计结果。(主要注释见代码)
第二遍和第三遍好像可以合起来,留作读者自行思考。
喜闻乐见的代码:
#include<bits/stdc++.h>
using namespace std;
struct pos{
double x,y,p;//建议用double保留精度
} cow[201];
double dis(pos a,pos b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));//求两点的欧几里得距离
}
int n,ans,con[201][201];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>cow[i].x>>cow[i].y>>cow[i].p;
for(int i=1;i<=n;i++)
for(int l=1;l<=n;l++)
con[i][l]=(dis(cow[i],cow[l])<=cow[i].p);//直接计算结果,返回1或0
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int l=1;l<=n;l++)
con[i][l]=con[i][l]||con[i][k]&&con[k][l];//可以直接这样写,偷懒利器
for(int i=1;i<=n;i++)
{
int vis=0;
for(int l=1;l<=n;l++)
vis+=con[i][l];
ans=max(ans,vis);//统计结果,更新ans
}
cout<<ans;
return 0;
}
更多内容见洛谷-P3416 [USACO16DEC] Moocast S
最后求赞
全部评论 5
sss #include <&&&>
5天前 来自 北京
0#include <iostrean>
5天前 来自 北京
0c
5天前 来自 北京
0b
5天前 来自 北京
0a
5天前 来自 北京
0







有帮助,赞一个