• 【CCF】无线网络 搜索+思维


      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<string>
      5 #include<cmath>
      6 #include<algorithm>
      7 #include<queue>
      8 #include<map>
      9 #include<stack>
     10 #include<vector>
     11 
     12 using namespace std;
     13 typedef long long ll;
     14 const double eps=1e-6;
     15 const int maxn=2e2+2;
     16 const int maxm=maxn*maxn;
     17 int n,m,k;
     18 ll r;
     19 struct node{
     20     ll x;
     21     ll y;
     22     node(ll _x,ll _y):x(_x),y(_y){}
     23 };
     24 vector<node> g;
     25 bool vis[maxn];
     26 struct Node{
     27     int id;
     28     int step;
     29     int k;
     30     Node(int _id,int _step,int _k):id(_id),step(_step),k(_k){}
     31 };
     32 bool judge(int u,int v){
     33     ll tmp=(g[u].x-g[v].x)*(g[u].x-g[v].x)+(g[u].y-g[v].y)*(g[u].y-g[v].y);
     34     if(tmp<=r*r) return true;
     35     return false; 
     36 }
     37 struct edge{
     38     int to;
     39     int nxt;
     40 }e[2*maxm];
     41 int tot;
     42 int head[maxn];
     43 void init(){
     44     g.clear();
     45     memset(head,-1,sizeof(head));
     46     tot=0;
     47     memset(vis,false,sizeof(vis));
     48 }
     49 void add(int u,int v){
     50     e[tot].to=v;
     51     e[tot].nxt=head[u];
     52     head[u]=tot++;
     53 }
     54 int bfs(){
     55     int s=1,t=2;
     56     queue<Node> Q;
     57     Q.push(Node(s,0,0));
     58     while(!Q.empty()){
     59         Node q=Q.front();
     60         Q.pop();
     61         if(q.id==t){
     62             return q.step;
     63         }
     64         if(vis[q.id]) continue;
     65         vis[q.id]=true;
     66         int u=q.id;
     67         for(int i=head[u];i!=-1;i=e[i].nxt){
     68             int v=e[i].to;
     69             if(v<=n){
     70                 Q.push(Node(v,q.step+1,q.k)); 
     71             }else{
     72                 if(q.k+1<=k){
     73                     Q.push(Node(v,q.step+1,q.k+1));
     74                 }
     75             }
     76         }
     77         
     78     }
     79     return -1;
     80 }
     81 int work(){
     82     return bfs()-1;
     83 }
     84 int main(){
     85     while(~scanf("%d%d%d%lld",&n,&m,&k,&r)){
     86         init();
     87         ll x,y;
     88         g.push_back(node(0,0));
     89         for(int i=1;i<=n;i++){
     90             scanf("%lld%lld",&x,&y);
     91             g.push_back(node(x,y));
     92         }
     93         for(int i=1;i<=m;i++){
     94             scanf("%lld%lld",&x,&y);
     95             g.push_back(node(x,y));
     96         }
     97         for(int i=1;i<=n+m;i++){
     98             for(int j=i+1;j<=n+m;j++){
     99                 if(judge(i,j)){
    100                     add(i,j);
    101                     add(j,i);
    102                 }
    103             }
    104         }
    105         int ans=work();
    106         printf("%d
    ",ans);
    107     }
    108     return 0;
    109 }
  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/itcsl/p/9194083.html
Copyright © 2020-2023  润新知