zoukankan      html  css  js  c++  java
  • [HDOJ6115] Factory(lca, 暴力乱搞)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6115

    这题数据太弱了,看到群里说这题暴力就行,就打了一个暴力。

    预处理每个点到根的距离,查的时候O(n^2logn)就行了。。。

    当然不排除我的暴力姿势好(1e6^3姿势再好也白搭)

      1 /*
      2 ━━━━━┒ギリギリ♂ eye!
      3 ┓┏┓┏┓┃キリキリ♂ mind!
      4 ┛┗┛┗┛┃\○/
      5 ┓┏┓┏┓┃ /
      6 ┛┗┛┗┛┃ノ)
      7 ┓┏┓┏┓┃
      8 ┛┗┛┗┛┃
      9 ┓┏┓┏┓┃
     10 ┛┗┛┗┛┃
     11 ┓┏┓┏┓┃
     12 ┛┗┛┗┛┃
     13 ┓┏┓┏┓┃
     14 ┃┃┃┃┃┃
     15 ┻┻┻┻┻┻
     16 */
     17 #include <bits/stdc++.h>
     18 using namespace std;
     19 #define fr first
     20 #define sc second
     21 #define cl clear
     22 #define BUG puts("here!!!")
     23 #define W(a) while(a--)
     24 #define pb(a) push_back(a)
     25 #define Rint(a) scanf("%d", &a)
     26 #define Rll(a) scanf("%I64d", &a)
     27 #define Rs(a) scanf("%s", a)
     28 #define Cin(a) cin >> a
     29 #define FRead() freopen("in", "r", stdin)
     30 #define FWrite() freopen("out", "w", stdout)
     31 #define Rep(i, len) for(int i = 0; i < (len); i++)
     32 #define For(i, a, len) for(int i = (a); i < (len); i++)
     33 #define Cls(a) memset((a), 0, sizeof(a))
     34 #define Clr(a, x) memset((a), (x), sizeof(a))
     35 #define Full(a) memset((a), 0x7f7f7f, sizeof(a))
     36 #define lrt rt << 1
     37 #define rrt rt << 1 | 1
     38 #define pi 3.14159265359
     39 #define RT return
     40 #define lowbit(x) x & (-x)
     41 #define onenum(x) __builtin_popcount(x)
     42 typedef long long LL;
     43 typedef long double LD;
     44 typedef unsigned long long ULL;
     45 typedef pair<int, int> pii;
     46 typedef pair<string, int> psi;
     47 typedef pair<LL, LL> pll;
     48 typedef map<string, int> msi;
     49 typedef vector<int> vi;
     50 typedef vector<LL> vl;
     51 typedef vector<vl> vvl;
     52 typedef vector<bool> vb;
     53 
     54 const int maxn = 200100;
     55 int n, k, CNT, tot;
     56 int dp[2*maxn][22],vis[maxn];
     57 int b[2*maxn], used[maxn], f[2*maxn], pos[maxn];
     58 vector<pii> G[2*maxn];
     59 vi rG[2*maxn];
     60 int val[maxn];
     61 
     62 void st(int n,int x[]) {
     63     for(int i = 1; i <= n; i++) dp[i][0] = x[i];
     64     int k = int(log(n+1.0)/log(2.0));
     65     for(int j = 1; j <= k; j++) {
     66         for(int i = 1; i + (1 << j) - 1 <= n; i++) {
     67             dp[i][j] = min(dp[i][j-1], dp[i+(1<<(j-1))][j-1]);
     68         }
     69     }
     70 }
     71 
     72 int query(int l,int r) {
     73     int k = int(log(r-l+1.0)/log(2.0));
     74     return min(dp[l][k], dp[r-(1<<k)+1][k]);
     75 }
     76 
     77 void dfs(int s) {
     78     int t;
     79     used[s] = 1;
     80     int w = ++CNT;
     81     b[++tot] = w; f[w] = s;
     82     pos[s] = tot;
     83     Rep(i, G[s].size()) {
     84         t=G[s][i].first;
     85         if(used[t])  continue;
     86         val[t] = val[s] + G[s][i].second;
     87         dfs(t);
     88         b[++tot] = w;
     89     }
     90 }
     91 int lca(int a,int b) {
     92     if(pos[a] > pos[b]) swap(a,b);
     93     return f[query(pos[a], pos[b])];
     94 }
     95 
     96 signed main() {
     97     // FRead();
     98     int u, v;
     99     int n,m,w;
    100     int T;
    101     Rint(T);
    102     W(T) {
    103         Rint(n); Rint(m);
    104         Rep(i, maxn) {
    105             G[i].clear();
    106             rG[i].clear();
    107         }
    108         For(i, 1, n) {
    109             Rint(u); Rint(v); Rint(w);
    110             G[u].push_back(make_pair(v,w));
    111             G[v].push_back(make_pair(u,w));
    112         }
    113         For(i, 1, m+1) {
    114             int cnt;
    115             Rint(cnt);
    116             W(cnt) {
    117                 int f;
    118                 Rint(f);
    119                 rG[i].push_back(f);
    120             }
    121         }
    122         val[1] = 0; CNT=0; tot = 0;
    123         Cls(used);
    124         dfs(1); st(tot,b);
    125         Rint(k);
    126         int ret;
    127         W(k) {
    128             int a, b;
    129             Rint(a); Rint(b);
    130             ret = 0x3f3f3f3f;
    131             Rep(i, rG[a].size()) {
    132                 Rep(j, rG[b].size()) {
    133                     u = rG[a][i]; v = rG[b][j];
    134                     w = val[u] + val[v] - 2 * val[lca(u,v)];
    135                     ret = min(w, ret);
    136                 }
    137             }
    138             printf("%d
    ", ret);
    139         }
    140     }
    141     return 0;
    142 }
  • 相关阅读:
    C/C++中的堆、栈和队列
    网卡工作状态检测
    Delphi 2007 的midas程序注册问题
    使用SQL语句备份与恢复数据库
    C/C++中的堆、栈和队列
    Delphi 2007 的midas程序注册问题
    如何使用VirtualBox的共享文件夹(转)
    如何使用VirtualBox的共享文件夹(转)
    C语言struct的使用
    printf常用格式
  • 原文地址:https://www.cnblogs.com/kirai/p/7388996.html
Copyright © 2011-2022 走看看