• [第18届 科大讯飞杯 J] 能到达吗


    能到达吗

    题目链接:牛客5278 J 能到达吗

    Description

    给定一个 (n imes m) 的地图,地图的左上角为 ((1, 1)) ,右下角为 ((n,m))
    地图上有 (k) 个障碍物,你可以上下左右走地图,但是不能走出地图走到障碍物上
    计算无序对 ({ (x_i,y_i), (x_j,y_j) }) 满足两点相互可达的对数。
    答案对 (10^9 + 7) 取模,多组数据。
    数据范围: (1 le Tle 10^4, 1le n, mle 2 imes 10^5, 0le kle 10^6)
    数据保证不存在同一位置的障碍物,并且 (sum k le 10^6)

    Solution

    https://ac.nowcoder.com/discuss/411541?type=101&order=0&pos=4&page=0

    Code(咕咕咕)

    // Author: wlzhouzhuan
    #pragma GCC optimize(2)
    #pragma GCC optimize(3)
    #include <bits/stdc++.h>
    using namespace std;
    
    #define ll long long
    #define ull unsigned long long
    #define rint register int
    #define rep(i, l, r) for (rint i = l; i <= r; i++)
    #define per(i, l, r) for (rint i = l; i >= r; i--)
    #define mset(s, _) memset(s, _, sizeof(s))
    #define pb push_back
    #define pii pair <int, int>
    #define mp(a, b) make_pair(a, b)
    
    inline int read() {
      int x = 0, neg = 1; char op = getchar();
      while (!isdigit(op)) { if (op == '-') neg = -1; op = getchar(); }
      while (isdigit(op)) { x = 10 * x + op - '0'; op = getchar(); }
      return neg * x;
    }
    inline void print(int x) {
      if (x < 0) { putchar('-'); x = -x; }
      if (x >= 10) print(x / 10);
      putchar(x % 10 + '0');
    }
    
    const int N = 2000001;
    
    struct node {
      int x, y;
      friend bool operator < (const node &a, const node &b) {
        if (a.x != b.x) return a.x < b.x;
        else return a.y < b.y;
      }
    } a[N];
    
    int f[N];
    int find(int x) {
      return f[x] == x ? x : f[x] = find(f[x]);
    }
    void Union(int x, int y) {
      x = find(x), y = find(y);
      if (sz[x] > sz[y]) { // 小的合并到大的上面 
        fa[y] = x;
        sz[x] += sz[y];
      } else {
        fa[x] = y;
        sz[y] += sz[x];
      }
    }
    
    void add_row() {
      lists[++row].clear();
    }
    void add_line(int l, int r, ll s) {
      col++;
      fa[col] = col, sz[col] = s; 
      lists[row].pb({l, r, col});
    }
    
    int main() {
      for (int _ = read(); _; _--) {
        n = read(), m = read(), k = read();
        for (int i = 1; i <= k; i++) {
          a[i].x = read(), a[i].y = read();
        }
        sort(a + 1, a + k + 1);
        if (k == 0) {
          add_row();
          
        }
      }
    }
    
  • 相关阅读:
    144环形链表
    83. 删除排序链表中的重复元素
    21合并两个有序链表
    PyCharm2020激活破解教程
    Python正课目录
    2条pip命令解决Python项目依赖的导出和导出
    pip离线安装模块
    Python正课149 —— luffy项目 User表的配置
    Python正课148 —— luffy项目 数据库配置
    解决:django中LookupError No installed app with label 'admin'
  • 原文地址:https://www.cnblogs.com/wlzhouzhuan/p/12727358.html
Copyright © 2020-2023  润新知