zoukankan      html  css  js  c++  java
  • hdu 3938 Portal离线并查集

    题意搞得迷迷糊糊的

    参考:http://blog.csdn.net/sdj222555/article/details/7439187

      1 #include<iostream>
      2 #include<cstdio>
      3 #include<cstdlib>
      4 #include<cstring>
      5 #include<string>
      6 #include<queue>
      7 #include<algorithm>
      8 #include<map>
      9 #include<iomanip>
     10 #define INF 99999999
     11 #define MAXN 10005
     12 using namespace std;
     13 
     14 int fa[MAXN], num[MAXN];
     15 long long out[MAXN];
     16 int n, m, q;
     17 
     18 //适用于正负整数
     19 template <class T>
     20 inline bool scan_d(T &ret) {
     21     char c; int sgn;
     22     if (c = getchar(), c == EOF) return 0; //EOF
     23     while (c != '-' && (c<'0' || c>'9')) c = getchar();
     24     sgn = (c == '-') ? -1 : 1;
     25     ret = (c == '-') ? 0 : (c - '0');
     26     while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0');
     27     ret *= sgn;
     28     return 1;
     29 }
     30 
     31 struct node {
     32     int u, v, w;
     33     bool operator < (const node& a) const {
     34         return w < a.w;
     35     }
     36 }edge[MAXN*10];
     37 
     38 struct wen {
     39     int l, id;
     40     bool operator <(const wen &a) const {
     41         return l < a.l;
     42     }
     43 }p[MAXN];
     44 
     45 void init()
     46 {
     47     for (int i = 1; i <= n; ++i) {
     48         fa[i] = i;
     49         num[i] = 1;
     50     }
     51 }
     52 
     53 int find(int x)
     54 {
     55     if (fa[x] == x) return x;
     56     int t = find(fa[x]);
     57     fa[x] = t;
     58     return t;
     59 }
     60 
     61 int join(int x, int y)
     62 {
     63     int fx = find(x);
     64     int fy = find(y);
     65     if (fx == fy) return 0;
     66     int t = num[fx] * num[fy];
     67     num[fx] += num[fy];
     68     num[fy] = 0; 
     69     fa[fy] = fx;
     70     return t;
     71 }
     72 
     73 int main()
     74 {
     75     while (cin >> n >> m >> q) {
     76         init(); 
     77         for (int i = 1; i <= m; ++i){
     78             //cin >> edge[i].u >> edge[i].v >> edge[i].w;
     79             scan_d(edge[i].u);
     80             scan_d(edge[i].v);
     81             scan_d(edge[i].w);
     82         }
     83         sort(edge + 1, edge + m + 1);
     84         for (int i = 1; i <= q; ++i) {
     85             //cin >> p[i].l;
     86             scan_d(p[i].l);
     87             p[i].id = i;
     88         }
     89         sort(p+1,p+q+1);
     90         int pos = 1;
     91         long long ans = 0;
     92         for (int i = 1; i <= q; ++i) {
     93             while (pos <= m && edge[pos].w <= p[i].l) {
     94                 ans += join(edge[pos].u,edge[pos].v);
     95                 pos++;
     96             }
     97             out[p[i].id] = ans;
     98         }
     99         for (int i = 1; i <= q; ++i) {
    100             cout << out[i] << endl;
    101         }
    102     }
    103     return 0;
    104 }
    代码搬运工
  • 相关阅读:
    2019 icpc西安邀请赛 点分治
    2019ccpc 秦皇岛
    hdu 5354 树上点分治
    cf 632E FFT+快速幂
    hdu 4812 树分治+逆元+手写hashmap
    2019 上海网络赛G 手写哈希map+字符串hash
    2019 上海icpc网络赛 C FFT优化卷积+小范围暴力
    hdu 6198 杜教BM
    洛谷P3804 后缀自动机
    集合总结
  • 原文地址:https://www.cnblogs.com/usedrosee/p/4250151.html
Copyright © 2011-2022 走看看