「CF576D」 Flights for Regular Customers
「CF576D」 Flights for Regular Customers
对不起我又想网络流去了
你看这长得多像啊,走过至少多少条边就是流量下界,然后没上界
但是这个题求的最少走多少条边啊...完全不一样好吧...
然后又开始想最短路相关算法,然后觉得分层图可以直接跑,然后发现 \(d_i\le 10^9\),直接爆炸。
然后就不会了。
注意到恰好走过 \(k\) 条边的最短路是可以通过 \(\texttt{Floyd}\) 求得的。那如果我走 \(k\) 条边能够到达某个点,那么我从这个点出发一定能走到所有权值 \(\le k\) 的边上去。
这启发我们对所有边按照 \(d_i\) 从小到大排序。
然后每一次预先求出走 \(d_i\) 步能够到达的点,以这些点为起点进行 \(\texttt{BFS}\),得到的到终点的距离加上 \(d_i\) 就是可能的答案。
然后发现本题我们不需要知道最短路长度,我们只需要维护可达性,使用 \(\texttt{bitset}\) 进行优化即可。
总时间复杂度为 \(O(m\frac{n^3\log d}{w})\)。
/*---Author:HenryHuang---*/
/*---Never Settle---*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=155;
int dis[maxn],n,m;
struct edge{
int u,v,w;
bool operator<(const edge &h)const{
return w<h.w;
}
}e[maxn];
struct matrix{
bitset<maxn> a[maxn];
matrix operator *(const matrix &h)const{
matrix z;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(a[i][j]) z.a[i]|=h.a[j];
return z;
}
}ans,a;
void ksm(matrix a,int b){
while(b){
if(b&1) ans=ans*a;
b>>=1,a=a*a;
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;++i){
int a,b,c;cin>>a>>b>>c;
e[i]=(edge){a,b,c};
}
for(int i=1;i<=n;++i) ans.a[i][i]=1;
sort(e+1,e+m+1);
int Ans=2e9;
for(int i=1;i<=m;++i){
if(Ans<=e[i].w) break;
int delta=e[i].w-e[i-1].w;
ksm(a,delta);
a.a[e[i].u][e[i].v]=1;
queue<int> Q;
for(int j=1;j<=n;++j)
if(ans.a[1][j]) Q.emplace(j),dis[j]=0;
else dis[j]=-1;
while(!Q.empty()){
int u=Q.front();Q.pop();
for(int v=1;v<=n;++v)
if(a.a[u][v]&&dis[v]==-1) dis[v]=dis[u]+1,Q.emplace(v);
}
if(dis[n]!=-1) Ans=min(Ans,dis[n]+e[i].w);
}
if(Ans==2e9) cout<<"Impossible\n";
else cout<<Ans<<'\n';
return 0;
}
「CF576D」 Flights for Regular Customers的更多相关文章
- 题解 CF576D 【Flights for Regular Customers】
对每条边来说,可以走这条边的限制解除是按\(d\)的顺序,所以先对每条边按\(d\)排序. 然后考虑每两条边之间的处理,用一个矩阵表示当前走\(d\)步是否可以从一个点到另一个点,称其为状态矩阵,用另 ...
- 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 ...
- Codeforces 576D Flights for Regular Customers(矩阵加速DP)
题目链接 Flights for Regular Customers 首先按照$d$的大小升序排序 然后分成$m$个时刻,每条路径一次处理过来. $can[i][j]$表示当前时刻$i$能否走到$j ...
- CF576D. Flights for Regular Customers
n<=150个点,m<=150条路,每条路Ai,Bi,Di表示Ai到Bi有一条有向边,使用他前至少要走Di条路,问1到n最少走几条路. 又是n^4过150的题.... 不同于传统的最短路, ...
- (中等) 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\ ...
随机推荐
- Apple Xcode 12.5 (12E262) 正式版发布 - 构建 Universal App
请访问原文链接:https://sysin.org/article/apple-xcode-12/,查看最新版.转载请保留出处. Xcode 12 简介 Xcode 12 采用全新设计,在 macOS ...
- openresty 学习笔记番外篇:python访问RabbitMQ消息队列
openresty 学习笔记番外篇:python访问RabbitMQ消息队列 python使用pika扩展库操作RabbitMQ的流程梳理. 客户端连接到消息队列服务器,打开一个channel. 客户 ...
- 永远的Ace 实验四 团队作业1:软件研发团队组建
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu-da ...
- 对端边缘云网络计算模式:透明计算、移动边缘计算、雾计算和Cloudlet
对端边缘云网络计算模式:透明计算.移动边缘计算.雾计算和Cloudlet 概要 将数据发送到云端进行分析是过去几十年的一个突出趋势,推动了云计算成为主流计算范式.然而,物联网时代设备数量和数据流量的急 ...
- 打造住院新体验,GVS智慧病房有何独到之处?
3月26-28日,由广东省医院协会主办的"2021第二届广东省医院建设大会暨医院建筑与装备展览会"在广州琶洲国际采购中心盛大举办,来自全国各地的医院代表及企事业单位代表4000余人 ...
- 基于Spring Boot的在线问卷调查系统的设计与实现+论文
全部源码下载 # 基于Spring Boot的问卷调查系统 ## 介绍 > * 本项目的在线问卷调查调查系统是基于Spring Boot 开发的,采用了前后端分离模式来开发. > * 前端 ...
- 【NX二次开发】Block UI 枚举
属性: 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- 【NX二次开发】Block UI 多行字符串
属性说明 常规 类型 描述 BlockID String 控件ID Enable Logical 是否可操作 Group Logical ...
- 选择合适Redis数据结构,减少80%的内存占用
redis作为目前最流行的nosql缓存数据库,凭借其优异的性能.丰富的数据结构已成为大部分场景下首选的缓存工具. 由于redis是一个纯内存的数据库,在存放大量数据时,内存的占用将会非常可观.那么在 ...
- ffmpeg-入门介绍(笔记)
一.FFmpeg的基本组成 目前,ffmpeg有7大库,分别为AVFormat, AVCodec, AVFilteer, AVDecoder, AVUtil,Swresample, Swscale,A ...