• 【HDOJ】3832 Earth Hour


    其实就是bfs,不过也可以写成最短路,因为权重为1,可以用Spira解。

      1 /* 3832 */
      2 #include <iostream>
      3 #include <string>
      4 #include <map>
      5 #include <queue>
      6 #include <set>
      7 #include <stack>
      8 #include <vector>
      9 #include <deque>
     10 #include <algorithm>
     11 #include <cstdio>
     12 #include <cmath>
     13 #include <ctime>
     14 #include <cstring>
     15 #include <climits>
     16 #include <cctype>
     17 #include <cassert>
     18 #include <functional>
     19 #include <iterator>
     20 #include <iomanip>
     21 using namespace std;
     22 //#pragma comment(linker,"/STACK:102400000,1024000")
     23 
     24 #define sti                set<int>
     25 #define stpii            set<pair<int, int> >
     26 #define mpii            map<int,int>
     27 #define vi                vector<int>
     28 #define pii                pair<int,int>
     29 #define vpii            vector<pair<int,int> >
     30 #define rep(i, a, n)     for (int i=a;i<n;++i)
     31 #define per(i, a, n)     for (int i=n-1;i>=a;--i)
     32 #define clr                clear
     33 #define pb                 push_back
     34 #define mp                 make_pair
     35 #define fir                first
     36 #define sec                second
     37 #define all(x)             (x).begin(),(x).end()
     38 #define SZ(x)             ((int)(x).size())
     39 #define lson            l, mid, rt<<1
     40 #define rson            mid+1, r, rt<<1|1
     41 
     42 const int maxn = 205;
     43 const int maxe = maxn*maxn*2;
     44 const int INF = 1e7;
     45 int X[maxn], Y[maxn], R[maxn];
     46 int dis[maxn], D[3][maxn];
     47 bool inS[maxn];
     48 int V[maxe], nxt[maxe];
     49 int head[maxn], head_[maxn], n, m;
     50 
     51 void addEdge(int u, int v) {
     52     V[m] = v;
     53     nxt[m] = head[u];
     54     head[u] = m++;
     55     
     56     V[m] = u;
     57     nxt[m] = head[v];
     58     head[v] = m++;
     59 }
     60 
     61 typedef struct node_t {
     62     int u, v, w;
     63     
     64     node_t() {}
     65     
     66     node_t(int u_, int v_, int w_):
     67         u(u_), v(v_), w(w_) {}
     68         
     69     friend bool operator< (const node_t& a, const node_t& b) {
     70         return a.w > b.w;
     71     }
     72 } node_t;
     73 
     74 void forward(priority_queue<node_t>& Q, int u) {
     75     int& k = head_[u];
     76     
     77     if (k != -1) {
     78         Q.push(node_t(u, V[k], dis[u]+1));
     79         k = nxt[k];
     80     }
     81 }
     82 
     83 void Spira(int s) {
     84     priority_queue<node_t> Q;
     85     node_t nd;
     86     int cnt = 1;
     87     
     88     memset(inS, false, sizeof(inS));
     89     rep(i, 1, n+1)    dis[i] = INF;
     90     dis[s] = 0;
     91     inS[s] = true;
     92     forward(Q, s);
     93     
     94     while (!Q.empty()) {
     95         nd = Q.top();
     96         Q.pop();
     97         forward(Q, nd.u);
     98         if (!inS[nd.v]) {
     99             inS[nd.v] = true;
    100             dis[nd.v] = nd.w;
    101             if (++cnt == n)
    102                 break;
    103             forward(Q, nd.v);
    104         }
    105     }
    106 }
    107 
    108 int main() {
    109     ios::sync_with_stdio(false);
    110     #ifndef ONLINE_JUDGE
    111         freopen("data.in", "r", stdin);
    112         freopen("data.out", "w", stdout);
    113     #endif
    114     
    115     int t;
    116     int mn, ans;
    117     
    118     scanf("%d", &t);
    119     while (t--) {
    120         scanf("%d", &n);
    121         rep(i, 1, n+1)
    122             scanf("%d %d %d", &X[i], &Y[i], &R[i]);
    123         memset(head, -1, sizeof(head));
    124         m = 0;
    125         rep(i, 1, n+1) {
    126             rep(j, 1, i) {
    127                 if ((X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j]) <= (R[i]+R[j])*(R[i]+R[j])) {
    128                     addEdge(i, j);
    129                 }
    130             }
    131         }
    132         
    133         memcpy(head_, head, sizeof(head));
    134         Spira(1);
    135         memcpy(D[0], dis, sizeof(dis));
    136         
    137         memcpy(head_, head, sizeof(head));
    138         Spira(2);
    139         memcpy(D[1], dis, sizeof(dis));
    140         
    141         memcpy(head_, head, sizeof(head));
    142         Spira(3);
    143         memcpy(D[2], dis, sizeof(dis));
    144         
    145         mn = INF;
    146         rep(i, 1, n+1)
    147             mn = min(mn, D[0][i]+D[1][i]+D[2][i]);
    148             
    149         ans = (mn==INF) ? -1:n-mn-1;
    150         printf("%d
    ", ans);
    151     }
    152     
    153     #ifndef ONLINE_JUDGE
    154         printf("time = %d.
    ", (int)clock());
    155     #endif
    156     
    157     return 0;
    158 }
  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4911328.html
Copyright © 2020-2023  润新知