题解 [ABC304C] Virus
大家好,我是 CQ-C2024 蒟蒻 CJH。
题意
有
第一个人被感染了病毒,他将会传染给道他欧几里得距离小于等于
请你求出
分析
传播病毒这种题,其实第一眼就会想到广度优先搜索。
于是只需要把
时间复杂度
代码
//the code is from chenjh
#include<cstdio>
#include<queue>
int n,d;
bool dis(int x,int y,int X,int Y){//判断 (x,y) 到 (X,Y) 的欧几里得距离是否小于等于 D。
return (X-x)*(X-x)+(Y-y)*(Y-y)<=d*d;//直接拆开根号,就不需要进行开方运算了。
}
int xx[2002],yy[2002];
bool v[2002];//是否感染病毒。
int main(){
scanf("%d%d",&n,&d);
for(int i=1;i<=n;i++) scanf("%d%d",&xx[i],&yy[i]);
std::queue<int> Q;
Q.push(1);//第一个人感染病毒。
for(int u;!Q.empty();){
u=Q.front();Q.pop();
if(v[u]) continue;//感染过则不再进行下一波传染。
v[u]=1;//标记为感染。
for(int j=1;j<=n;j++)
if(j!=u && dis(xx[u],yy[u],xx[j],yy[j]) && !v[j])//注意:两个点不能是同一个点!
Q.push(j);
}
for(int i=1;i<=n;i++) puts(v[i]?"Yes":"No");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!