576D Flights for Regular Customers
分析
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的更多相关文章
- Codeforces 576D Flights for Regular Customers(矩阵加速DP)
题目链接 Flights for Regular Customers 首先按照$d$的大小升序排序 然后分成$m$个时刻,每条路径一次处理过来. $can[i][j]$表示当前时刻$i$能否走到$j ...
- (中等) 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 ...
- Codeforces 576D Flights for Regular Customers 矩阵快速幂+DP
题意: 给一个$n$点$m$边的连通图 每个边有一个权值$d$ 当且仅当当前走过的步数$\ge d$时 才可以走这条边 问从节点$1$到节点$n$的最短路 好神的一道题 直接写做法喽 首先我们对边按$ ...
- Codeforces 576D. Flights for Regular Customers(倍增floyd+bitset)
这破题调了我一天...错了一大堆细节T T 首先显然可以将边权先排序,然后逐个加进图中. 加进图后,倍增跑跑看能不能到达n,不能的话加新的边继续跑. 倍增的时候要预处理出h[i]表示转移矩阵的2^0~ ...
- Codeforces 576D Flights for Regular Customers (图论、矩阵乘法、Bitset)
题目链接 http://codeforces.com/contest/576/problem/D 题解 把边按\(t_i\)从小到大排序后枚举\(i\), 求出按前\((i-1)\)条边走\(t_i\ ...
- Codeforces 576D - Flights for Regular Customers(bitset 优化广义矩阵乘法)
题面传送门 题意: 有一张 \(n\) 个点 \(m\) 条边的有向图,你初始在 \(1\) 号点,边上有边权 \(c_i\) 表示只有当你经过至少 \(c_i\) 条边的时候你才能经过第 \(i\) ...
- CF576D Flights for Regular Customers 矩阵乘法 + Bitset优化
%%%cxhscst2's blog Codeforces 576D Flights for Regular Customers(矩阵加速DP) 代码非常优美 + 简洁,学习到了 Code: #inc ...
- 【CodeForces】576 D. Flights for Regular Customers
[题目]D. Flights for Regular Customers [题意]给定n个点m条边的有向图,每条边有di表示在经过该边前必须先经过di条边,边可重复经过,求1到n的最小经过边数.n,m ...
- 「CF576D」 Flights for Regular Customers
「CF576D」 Flights for Regular Customers 对不起我又想网络流去了 你看这长得多像啊,走过至少多少条边就是流量下界,然后没上界 但是这个题求的最少走多少条边啊...完 ...
随机推荐
- 在CentOS7上无人值守安装Zabbix4.2
#!/bin/bash # 检查操作系统版本,该脚本只能运行在 Centos .x 系统上 cat /etc/redhat-release |grep -i centos |grep '7.[[:di ...
- CSS的四种定位的参照物
一.static定位 HTML 元素的默认值,即没有定位,遵循正常的文档流对象. 静态定位的元素不会受到 top, bottom, left, right影响. <!DOCTYPE html&g ...
- 【Java】 Java反射机制总结
一.什么是反射 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的 ...
- FMCJ450-基于ADRV9009的射频收发模块
FMCJ450-基于ADRV9009的射频收发模块 一.板卡概述 接收路径包括两个具有动态范围的独立式宽带宽直接转换接收器.该器件还支持宽带宽分时观察路径接收器,供在 TDD 应用中使用.完整的接收子 ...
- 286-基于6U VPX 的mSATA高性能数据存储板
基于6U VPX 的mSATA高性能数据存储板 一.板卡概述 该产品系我司自主研发.基于标准6U VPX架构. 二.产品特性 最大存储容量8TB 读写方式RAID0 ,读写速 ...
- 测试 windows 发布日志
<script>alert("hellow world")</script>
- vue父组件调用子组件方法、父组件向子组件传值、子组件向父组件传值
一.父组件调用子组件方法 父组件代码 parent.vue <template> <div> <button @click="parentFun" ...
- IDEA部署Spring-boot到Docker容器
一.准备工作 idea安装Docker插件 centos7系统安装docker 二.打开docker远程端口 1. 编辑docker.service文件 vim /usr/lib/systemd/sy ...
- ZROI 19.08.04模拟赛
传送门 写在前面:为了保护正睿题目版权,这里不放题面,只写题解. "这应该是正睿OI历史上第一次差评破百的比赛." "这说明来正睿集训的人越来越多了." &qu ...
- 甘特图 dhtmlx 插件
https://dhtmlx.com/docs/products/demoApps/advanced-gantt-chart/