• HDU2586(tarjanLCA板子)


     1 const int maxn = 4e4 + 5;
     2 int T, n, m;
     3 int f[maxn], vis[maxn], dis[maxn], ans[maxn];
     4 vector<P> vc[maxn];
     5 vector<int> query[maxn], id[maxn];
     6 
     7 inline int getf(int v) { return v == f[v] ? v : f[v] = getf(f[v]); }
     8 
     9 inline void Tarjan(int cur) {
    10     vis[cur] = 1;
    11 
    12     for (auto son : vc[cur]) {
    13         if (vis[son.first])    continue;
    14 
    15         dis[son.first] = dis[cur] + son.second;
    16         Tarjan(son.first);
    17         f[son.first] = cur;
    18     }
    19 
    20     vis[cur] = 2;
    21 
    22     for (int i = 0; i < query[cur].size(); i++) {
    23         int v = query[cur][i], t = id[cur][i];
    24 
    25         if (vis[v] == 2) {
    26             int lca = getf(v);
    27             ans[t] = dis[cur] + dis[v] - 2 * dis[lca];
    28         }
    29     }
    30 }
    31 
    32 int main() {
    33     for (read(T); T; T--) {
    34         read(n), read(m);
    35 
    36         rep(i, 1, n) {
    37             vc[i].clear(), query[i].clear(), id[i].clear();
    38             f[i] = i, vis[i] = 0;
    39         }
    40 
    41         rep(i, 1, n - 1) {
    42             int u, v, cost;
    43             read(u), read(v), read(cost);
    44             vc[u].push_back({v, cost});
    45             vc[v].push_back({u, cost});
    46         }
    47 
    48         auto Add_Query = [](int u, int v, int i) {
    49             query[u].push_back(v);
    50             id[u].push_back(i);
    51         };
    52 
    53         rep(i, 1, m) {
    54             int u, v;
    55             read(u), read(v);
    56             Add_Query(u, v, i);
    57             if(u != v)    Add_Query(v, u, i);
    58         }
    59 
    60         Tarjan(1);
    61 
    62         rep(i, 1, m)
    63             writeln(ans[i]);
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    java 基础 01 变量和注释、数据类型
    js虚拟数字小键盘
    好看的table样式
    Java8的lambda表达式和Stream API
    设计模式-模板
    【转】Git使用教程之基础篇
    Linux安装redis和部署
    【原】DjianGo Windows7下的安装
    【转】七牛云加速域名配置
    【原】Solr入门之概念和安装
  • 原文地址:https://www.cnblogs.com/AlphaWA/p/10633048.html
Copyright © 2020-2023  润新知