题目链接  Flights for Regular Customers

首先按照$d$的大小升序排序

然后分成$m$个时刻,每条路径一次处理过来。

$can[i][j]$表示当前时刻$i$能否走到$j$

$can$通过上一条路径后的$can$和当前的可行路径矩阵的$d$次幂得到。

这由$floyd$求解即可。考虑到$d$很大,用矩阵快速幂加速。

TLE on test 10

矩阵乘法的时候用$bitset$优化。

更新答案的时候,我们枚举每个点。

若第$1$个点可以走到第$i$个点,则更新答案。

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) const int N = 160;
const int inf = 0x3f3f3f3f; int n, m, ans = inf;
int dis[N][N], f[N][N];
int cnt;
bitset <N> can[N], now[N], tmp[N], base[N]; struct node{
int x, y, d;
void scan(){ scanf("%d%d%d", &x, &y, &d); }
friend bool operator < (const node &a, const node &b){
return a.d < b.d;
}
} e[N]; void Mul(bitset<N> *a, bitset<N> *b){
bitset<N> ret[N];
rep(i, 1, n) rep(j, 1, n) if(a[i][j]) ret[i] |= b[j];
rep(i, 1, n) a[i] = ret[i];
} void Pow(bitset <N> *a, int b){
bitset <N> ret[N];
rep(i, 1, n) ret[i][i] = 1;
for (; b; b >>= 1){
if (b & 1) Mul(ret, a);
Mul(a, a);
}
rep(i, 1, n) a[i] = ret[i];
} int main(){ scanf("%d%d", &n, &m);
rep(i, 1, m) e[i].scan(); sort(e + 1, e + m + 1); rep(i, 1, n) rep(j, 1, n) dis[i][j] = inf;
rep(i, 1, n) dis[i][i] = 0; cnt = 0;
ans = inf;
rep(i, 1, n) can[i][i] = 1; rep(i, 1, m){
int x = e[i].x, y = e[i].y, d = e[i].d;
rep(j, 1, n) tmp[j] = base[j];
Pow(tmp, d - cnt);
Mul(can, tmp);
rep(j, 1, n) rep(k, 1, n) dis[j][k] = min(dis[j][k], dis[j][x] + 1 + dis[y][k]);
rep(j, 1, n - 1) if (can[1][j]) ans = min(ans, d + dis[j][n]);
cnt = d;
base[x][y] = 1;
} if (ans < 0x3f3f3f3f) printf("%d\n", ans);
else puts("Impossible");
return 0;
}

Codeforces 576D Flights for Regular Customers(矩阵加速DP)的更多相关文章

  1. Codeforces 576D Flights for Regular Customers 矩阵快速幂+DP

    题意: 给一个$n$点$m$边的连通图 每个边有一个权值$d$ 当且仅当当前走过的步数$\ge d$时 才可以走这条边 问从节点$1$到节点$n$的最短路 好神的一道题 直接写做法喽 首先我们对边按$ ...

  2. Codeforces 576D Flights for Regular Customers (图论、矩阵乘法、Bitset)

    题目链接 http://codeforces.com/contest/576/problem/D 题解 把边按\(t_i\)从小到大排序后枚举\(i\), 求出按前\((i-1)\)条边走\(t_i\ ...

  3. Codeforces 576D - Flights for Regular Customers(bitset 优化广义矩阵乘法)

    题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) ...

  4. Codeforces 576D. Flights for Regular Customers(倍增floyd+bitset)

    这破题调了我一天...错了一大堆细节T T 首先显然可以将边权先排序,然后逐个加进图中. 加进图后,倍增跑跑看能不能到达n,不能的话加新的边继续跑. 倍增的时候要预处理出h[i]表示转移矩阵的2^0~ ...

  5. CF576D Flights for Regular Customers 矩阵乘法 + Bitset优化

    %%%cxhscst2's blog Codeforces 576D Flights for Regular Customers(矩阵加速DP) 代码非常优美 + 简洁,学习到了 Code: #inc ...

  6. (中等) CF 576D Flights for Regular Customers (#319 Div1 D题),矩阵快速幂。

    In the country there are exactly n cities numbered with positive integers from 1 to n. In each city ...

  7. 576D Flights for Regular Customers

    分析 https://www.cnblogs.com/onioncyc/p/8037056.html 写的好像有点问题 但是大致就是这个意思 代码很好理解 代码 #include<bits/st ...

  8. 【CodeForces】576 D. Flights for Regular Customers

    [题目]D. Flights for Regular Customers [题意]给定n个点m条边的有向图,每条边有di表示在经过该边前必须先经过di条边,边可重复经过,求1到n的最小经过边数.n,m ...

  9. 「CF576D」 Flights for Regular Customers

    「CF576D」 Flights for Regular Customers 对不起我又想网络流去了 你看这长得多像啊,走过至少多少条边就是流量下界,然后没上界 但是这个题求的最少走多少条边啊...完 ...

随机推荐

  1. 如何用纯 CSS 创作一颗逼真的土星

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/EpbaQX 可交互视频 ...

  2. 有关nmap的5个常用的扫描指令

    [以下IP可替换成需要被测试的IP网段] 1.ping扫描:扫描192.168.0.0/24网段上有哪些主机是存活的: nmap -sP 192.168.0.0/24   2.端口扫描:扫描192.1 ...

  3. Educational Codeforces Round 41 E. Tufurama (961E)

    [题解] 第一眼看题飞快地想到一种做法,然后假掉了. 这道题其实是主席树的模板题来着.但是也有别的水法. 我们可以发现每个位置的查询区间是[1,min(a[i],i-1)],所以我们可以把查询区间按照 ...

  4. Linux学习-备份策略

    每部主机的任务都不相同,重要的数据也不相同,重要性也不一样,因此,每个人的备份思考角度都不一样! 备份分为两大部分,一个是每日备份经常性变动的重要数据, 一个则是每周备份就不常变动的信息.这个时候我就 ...

  5. selenium2等待元素加载

    1.硬性等待 Thread.sleep(8000); 所谓的硬性等待就是,执行完相应操作就等待我设置的8s.无论网速快与慢,网速快的话,也许5s就打开网页了,可是程序必须接着等待剩下的3秒. 网速慢的 ...

  6. HDU 3639 SCC Hawk-and-Chicken

    求SCC缩点,统计出每个SCC中的点的个数. 然后统计能到达u的最多的点的个数,可以反向建图,再dfs一遍统计出来. 最后说一下,有必要开一个标记数组,因为测试数据中有重边,结果无限WA. #incl ...

  7. Python之log的处理方式

    配置文件: #! /usr/bin/env python # -*- coding: utf-8 -*- """ logging配置 """ ...

  8. socketcluster 客户端请求

    <html> <head> <title>test</title> <script src="https://cdn.bootcss.c ...

  9. 令人惊叹的Visual Studio Code插件

    vscode是一款开源且优秀的编辑器,接下来让我吐血推荐一下我工作使用过的令人惊叹的Visual Studio Code插件. 代码编辑插件 vscode-color-highlight ------ ...

  10. PHP 教父鸟哥 Yar 的原理分析

    模块越来越多,业务越来越复杂,RPC 就上场了,在 PHP 的世界里,鸟哥的作品一直备受广大网友的青睐.下面一起学习下鸟哥的 PRC 框架 Yar . 揭开 Yar 神秘面纱 RPC 采用客户端/服务 ...