zoukankan      html  css  js  c++  java
  • 【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 }
  • 相关阅读:
    iaas,paas,saas理解
    July 06th. 2018, Week 27th. Friday
    July 05th. 2018, Week 27th. Thursday
    July 04th. 2018, Week 27th. Wednesday
    July 03rd. 2018, Week 27th. Tuesday
    July 02nd. 2018, Week 27th. Monday
    July 01st. 2018, Week 27th. Sunday
    June 30th. 2018, Week 26th. Saturday
    June 29th. 2018, Week 26th. Friday
    June 28th. 2018, Week 26th. Thursday
  • 原文地址:https://www.cnblogs.com/itcsl/p/9194083.html
Copyright © 2011-2022 走看看