首页 > 其他分享 >一个看起来比较有用的小 trick。

一个看起来比较有用的小 trick。

时间:2023-01-29 15:13:55浏览次数:52  
标签:看起来 int res trick 有用 枚举 Floyd bitset tie

ABC287Ex - Directed Graph and Query

其实相当于分步加入点,构成点导出子图。

Floyd 维护联通性来判断。

但是 Floyd 是 \(O(N^3)\) 的,非常慢。

那么拿 bitset 维护就能优化成 \(O(\dfrac{N^3}{w})\) 了。

这里枚举的 \(i\) 实际上是枚举的中转点(Floyd 循环中的 \(k\))。

枚举 \(i\),保证当前图上仅有点权 \(\le i\) 的点。

那么有,如果当前联通,则答案一定最小。

更新答案即可。

#include <bits/stdc++.h>
using namespace std;

const int N = 2e3 + 10;
int n, m, q, st[N << 3], ed[N << 3], res[N << 3];
vector <int> g[N]; bitset <N> t[N];

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0);
    cin >> n >> m; for (int i = 1, u, v; i <= m; ++i)
        cin >> u >> v, t[u][v] = true;
    for (int i = 1; i <= n; ++i) t[i][i] = true;
    cin >> q; for (int i = 1; i <= q; ++i) cin >> st[i] >> ed[i];
    memset(res, -1, sizeof(res));
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) if (t[j][i]) t[j] |= t[i];
        for (int j = 1; j <= q; ++j)
            if (res[j] == -1 && t[st[j]][ed[j]]) res[j] = max({st[j], ed[j], i});
    }
    for (int i = 1; i <= q; ++i) cout << res[i] << endl;
    return 0;
}

标签:看起来,int,res,trick,有用,枚举,Floyd,bitset,tie
From: https://www.cnblogs.com/MistZero/p/Useful-Trick-1.html

相关文章

  • nvme硬盘的断电保护是否有用,是噱头、智商税还是真的有需要?购买DOCKCASE智能M2固态硬盘
    最近在某东上买了一个10秒断电保护的nvme硬盘,其实对于这个断电保护有用没有用我是不懂的,也是不care的,买这个硬盘盒主要就是为了这个屏幕去的,不过东西到手后我就开始思考这......
  • caddyserver 几个有用的配置参数
    不是介绍caddyserver的配置参数,核心是关于ssl证书以及配置存储存储的几个参数XDG_DATA_HOME主要是关于caddyserver基于acme协议处理证书的,比较有用,可以更好的管理证......
  • 有哪些老程序员都知道对新程序员很有用的经验
    回想起自己刚步入职场的时候,接到任务的心态就是尽快搞完,只要没做完就怕耽误了整个团队,还怕领导觉得自己能不行,怕被开除等等。但是每次完成之后,都有错误,编译通过了,逻辑又有问......
  • Trick 12:各种优美的暴力复杂度
    一些经典的\(\mathcal{O}(n\logn)\)复杂度的暴力美学:启发式合并:多个集合总大小为\(n\),每次合并两个集合并处理信息,若合并\(a,b\)的复杂度为\(\mathcal{O}(\min(......
  • MYSQL分页查询时没有用ORDER BY出现数据重复的问题
    背景产品反馈,用户在使用分页列表时,出现数据重复的问题,查看代码后发现对应的分页SQL并没有使用orderby进行排序,但是印象中Mysql的InnoDB引擎会默认按照主键id进行排序,本地......
  • Trick 11:区间 DP 杂题选讲
    大家好,下面讲的题目一个都不会,但是我脸皮很厚,所以分享给大家了。搁前面说一句:做题的时候能不能别丢掉这个算法啊!试一下啊!Pro.1P7914这是一个练手题。我们先来说说括号......
  • Trick 10:树论小知识
    关于树上的路径\(a_1\toa_2\toa_3\toa_4\to...\toa_n\)(\(a_i\)与\(a_{i+1}\)之间未必有边,路径可重复)的路径并处理问题如果我们面临多次询问,每次给你一堆......
  • 一些看起来很酷的Linux命令
    1.sl命令你会看到一辆火车从屏幕右边开往左边……安装$ sudo apt-get install sl运行$ sl命令有-alFe几个选项,-a An accident seems to happen. You'll ......
  • 刷算法题的一些Trick
    1字符串的输入在读字符串的时候,一般建议这么写charstr[N];//字符数组scanf("%s",str);//因为str可以当作指针,所以不用&puts(str);字符串作为函数参数的时候......
  • Jupyter Lab 的 10 个有用技巧
    JupyterLab是JupyterNotebook「新」界面。它包含了jupyternotebook的所有功能,并升级增加了很多功能。它最大的更新是模块化的界面,可以在同一个窗口以标签的形式同时打开......