zoukankan      html  css  js  c++  java
  • hdu 3832 Earth Hour

    http://acm.hdu.edu.cn/showproblem.php?pid=3832

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cmath>
     4 #include <cstring>
     5 #include <vector>
     6 #include <algorithm>
     7 #include <queue>
     8 #define maxn 1001
     9 using namespace std;
    10 const int inf=1<<28;
    11 
    12 int g[maxn][maxn];
    13 bool vis[maxn];
    14 int dis1[maxn],dis2[maxn],dis3[maxn];
    15 int n;
    16 struct node
    17 {
    18     int x,y,r;
    19 }p[maxn];
    20 int sqr(int x)
    21 {
    22     return x*x;
    23 }
    24 
    25 void spfa(int src,int dis[])
    26 {
    27     queue<int>q;
    28     memset(vis,false,sizeof(vis));
    29     for(int i=0; i<=n; i++) dis[i]=inf;
    30     dis[src]=0;
    31     vis[src]=true;
    32     q.push(src);
    33     while(!q.empty())
    34     {
    35         int u=q.front(); q.pop();
    36         vis[u]=false;
    37         for(int i=0; i<n; i++)
    38         {
    39             if(dis[i]>dis[u]+g[u][i]&&g[u][i]!=inf)
    40             {
    41                 dis[i]=dis[u]+g[u][i];
    42                 if(!vis[i])
    43                 {
    44                     q.push(i);
    45                     vis[i]=true;
    46                 }
    47             }
    48         }
    49     }
    50 }
    51 
    52 int main()
    53 {
    54     int t;
    55     scanf("%d",&t);
    56     while(t--)
    57     {
    58         scanf("%d",&n);
    59         for(int i=0; i<=n; i++)
    60         {
    61             for(int j=0; j<=n; j++)
    62             {
    63                 if(i==j) g[i][j]=0;
    64                 else g[i][j]=inf;
    65             }
    66         }
    67         for(int i=0; i<n; i++)
    68         {
    69            cin>>p[i].x>>p[i].y>>p[i].r;
    70         }
    71         for(int i=0; i<n; i++)
    72         {
    73             for(int j=i+1; j<n; j++)
    74             {
    75                 if(sqrt(sqr(p[i].x-p[j].x)+sqr(p[i].y-p[j].y))<=(p[i].r+p[j].r))
    76                 {
    77                     g[i][j]=g[j][i]=1;
    78                 }
    79             }
    80         }
    81         spfa(0,dis1);
    82         spfa(1,dis2);
    83         spfa(2,dis3);
    84         int min1=inf;
    85         for(int i=0; i<n; i++)
    86         {
    87             //printf("%d %d %d
    ",dis1[i],dis2[i],dis3[i]);
    88             min1=min(min1,dis1[i]+dis2[i]+dis3[i]);
    89         }
    90         if(min1==inf) printf("-1
    ");
    91         else printf("%d
    ",n-min1-1);
    92     }
    93     return 0;
    94 }
    View Code
  • 相关阅读:
    html5分割上传实现超大文件无插件网页上传问题
    html5分割上传实现超大文件无插件网页上传方法
    spring JDBCTemplate 批量操作
    spring JDBCTemplate 查询操作
    spring JDBCTemplate 修改和删除
    spring JDBCTemplate 添加操作
    spring JDBCTemplate 概念和准备
    spring AOP 基于配置文件
    spring AOP 基于注解
    使用 流量统计 定位网络故障
  • 原文地址:https://www.cnblogs.com/fanminghui/p/3732530.html
Copyright © 2011-2022 走看看