分析

https://www.cnblogs.com/onioncyc/p/8037056.html

写的好像有点问题

但是大致就是这个意思

代码很好理解

代码

#include<bits/stdc++.h>
using namespace std;
#define bt bitset<160>
const int inf = 0x3f3f3f3f;
int n,m,g[][];
bt ans[],a[],c[];
struct node {
int x,y,z;
};
node d[];
inline bool cmp(const node x,const node y){return x.z<y.z;}
inline void mul(bt a[],bt b[]){
int i,j,k;
for(i=;i<=n;i++)c[i].reset();
for(k=;k<=n;k++)
for(i=;i<=n;i++)
if(a[i][k])c[i]|=b[k];
for(i=;i<=n;i++)a[i]=c[i];
}
int main(){
int i,j,k;
scanf("%d%d",&n,&m);
for(i=;i<=m;i++)scanf("%d%d%d",&d[i].x,&d[i].y,&d[i].z);
sort(d+,d+m+,cmp);
for(i=;i<=n;i++)ans[i].reset();
for(i=;i<=n;i++)ans[i][i]=;
int Ans=inf;
for(int _=;_<=m;_++){
for(i=;i<=n;i++)a[i].reset();
for(i=;i<_;i++)a[d[i].x][d[i].y]=;
k=d[_].z-d[_-].z;
while(k){
if(k&)mul(ans,a);
mul(a,a);
k>>=;
}
memset(g,0x3f,sizeof(g));
for(i=;i<=n;i++)g[i][i]=;
for(i=;i<=_;i++)g[d[i].x][d[i].y]=;
for(k=;k<=n;k++)
for(i=;i<=n;i++)
for(j=;j<=n;j++)
g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
for(i=;i<=n;i++)if(ans[][i])Ans=min(Ans,d[_].z+g[i][n]);
}
if(Ans==inf)puts("Impossible");else printf("%d\n",Ans);
return ;
}

576D Flights for Regular Customers的更多相关文章

  1. Codeforces 576D Flights for Regular Customers(矩阵加速DP)

    题目链接  Flights for Regular Customers 首先按照$d$的大小升序排序 然后分成$m$个时刻,每条路径一次处理过来. $can[i][j]$表示当前时刻$i$能否走到$j ...

  2. (中等) 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 ...

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

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

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

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

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

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

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

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

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

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

  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. Jade学习(六)之使用html2jade反编译

    我们可以使用html2jade将html编译成jade 首先安装html2jade npm install html2jade -g 用法一:使用html2jade将html转为jade html2j ...

  2. src和href都是链接有啥不一样

    前言 src和href都是用于外部资源的引入,像图片.CSS文件.HTML文件.js文件或其他web页面等.那么在SRC和HREF之间是否有一个明确的区别呢?在哪些地方或者什么时候应该用SRC还是HR ...

  3. 087、日志管理之 Docker logs (2019-05-09)

    参考https://www.cnblogs.com/CloudMan6/p/7749304.html   高效的监控和日志管理对保持生产系统只需稳定的运行以及排查问题至关重要.   在微服务架构中,由 ...

  4. git 本地tag和远程tag对应不上 vscode里pull不下代码

    vscode拉取代码是用  git pull --tags origin saas-xxx > git pull --tags origin saas-base From 172.16.0.xx ...

  5. MySQL8连接数据库

    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127. ...

  6. nacos集群搭建

    nacos介绍 Nacos 支持基于 DNS 和基于 RPC 的服务发现(可以作为springcloud的注册中心).动态配置服务(可以做配置中心).动态 DNS 服务. 1.从官网下载nacos压缩 ...

  7. static静态和非静态详解

    static 作为Java中的一个关键字,用于修饰方法.成员变量(Field),统称为成员. 有static修饰的成员   属于类 1.方法称为静态方法(类方法),Field称为类的属性. 2.静态成 ...

  8. 【译文】Git merge 和 Git rebase比较

    [译文]Git merge 和 Git rebase比较 原创: 胡江华 胡同学和朋友们的成长日记 2017-03-22 git rebase 这个命令经常被人认为是一种Git巫术,初学者应该避而远之 ...

  9. Java基本的程序结构设计 字符类型

    char类型 char是2个字节,和short一样. char用单引号来表示. char可以通过数字来表示,也可以通过字母来表示,也可以通过unicode编码单元来表示,特殊字符还可以通过\+字符来表 ...

  10. element 表单校验失败自动聚焦到失败的input框

    1.在对应的input框上添加ref属性,直接根据ref就可精确地获取到元素 <el-form-item label="课程名称" :label-width="fo ...