【学习笔记】CF576D Flights for Regular Customers

news/2024/11/29 3:40:34/

又是有向图。。。

不同于传统的最短路,当我们走到一个节点的时候,还要记录此时经过的边数才能完成转移。但是第二维太大了,太抽象了!

看到 m m m这么小,很难不想到离散化。那么设 f i , j f_{i,j} fi,j表示当第 i i i条边出现时,在节点 j j j是否可行,注意这是 01 01 01状态。转移非常粗暴,因为我们要在当前的边集下逗留 d i + 1 − d i d_{i+1}-d_i di+1di步,所以直接每次跳 2 i 2^i 2i步即可。

算一下复杂度,居然是 n 3 m log ⁡ V n^3m\log V n3mlogV,因为每加入一条边都要跑一遍 Floyd \text{Floyd} Floyd,太抽象了!!因为是 01 01 01状态所以可以用 bitset \text{bitset} bitset优化,这样复杂度 n 3 w m log ⁡ V \frac{n^3}{w}m\log V wn3mlogV,这样算下来已经可以通过了。。。

发现问题瓶颈在于计算邻接矩阵的 k k k次幂上面,可以采取动态加边的思想来维护,然后因为左乘的是一个向量(哪些点可达),所以这一部分也可以少一个 n n n。这样复杂度 n 2 w m log ⁡ V \frac{n^2}{w}m\log V wn2mlogV。但是为什么没有人写这个做法呢?

#include<bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=155;
int n,m,res=0x3f3f3f3f,dis[N];
queue<int>Q;
struct node{bitset<N>f[N];node(){for(int i=1;i<=n;i++)f[i].reset();}node operator *(const node &a)const{node r;for(int i=1;i<=n;i++)assert(r.f[i].count()==0);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(f[i][j]){r.f[i]|=a.f[j];}}}return r;}
}f,mat;
struct edge{int x,y,d;bool operator <(const edge &a)const{return d<a.d;}
}edges[N];
bitset<N>arrays;
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=m;i++)cin>>edges[i].x>>edges[i].y>>edges[i].d;sort(edges+1,edges+1+m);arrays[1]=1;for(int i=1;i<=m;i++){int x=edges[i].x,y=edges[i].y,k=edges[i].d-edges[i-1].d;f=mat;for(;k;k>>=1){if(k&1){bitset<N>tmp;for(int j=1;j<=n;j++){for(int k=1;k<=n;k++){if(f.f[j][k]&&arrays[j])tmp[k]=1;}}arrays=tmp;}f=f*f;}mat.f[x][y]=1;memset(dis,0x3f,sizeof dis);for(int j=1;j<=n;j++){if(arrays[j]){Q.push(j),dis[j]=edges[i].d;}}while(Q.size()){int u=Q.front();Q.pop();for(int v=1;v<=n;v++){if(mat.f[u][v]&&dis[u]+1<dis[v]){dis[v]=dis[u]+1;Q.push(v);}}}res=min(res,dis[n]);}if(res==0x3f3f3f3f)cout<<"Impossible";else cout<<res;
}

http://www.ppmy.cn/news/769710.html

相关文章

58同城再曝上市传闻:筹资至少1亿美元

合肥技术联盟群联最新资讯20130801 58同城再曝上市传闻&#xff1a;筹资至少1亿美元 匿名消息人士称&#xff0c;58同城正在与瑞士信贷和摩根士丹利展开合作&#xff0c;筹备IPO交易。 原文链接&#xff1a; http://hfta.sinaapp.com/Link/show/id/30306 Google Maps 迎来新「景…

百度刚刚晋升的29岁最年轻副总裁李明远

合肥技术联盟群联最新资讯20130801 58同城再曝上市传闻&#xff1a;筹资至少1亿美元 匿名消息人士称&#xff0c;58同城正在与瑞士信贷和摩根士丹利展开合作&#xff0c;筹备IPO交易。 原文链接&#xff1a; http://hfta.sinaapp.com/Link/show/id/30306 Google Maps 迎来新「景…

中国空“芯”之忧:一年进口芯片总值超石油

曾经有这么一个段子&#xff1a; 苹果 (481.53,-7.57, -1.55%)一“饥渴”&#xff0c;其他手机品牌就要挨饿&#xff0c;说的是由于高端芯片供应有限&#xff0c;在芯片厂商选择客户时&#xff0c;国产手机厂商只能“稍等片刻”。 如今&#xff0c;虽然苹果已走下神坛&#x…

面向移动互联网及大数据联芯科技3S战略深耕4G市场

上海2014年6月24日电引领通信领域发展趋势的盛会 -- 2014年亚洲移动通信博览会&#xff08;MAE&#xff09;前不久在上海落下帷幕&#xff0c;大唐电信执行副总裁、联芯科技总裁钱国良先生&#xff0c;在MAE同期论坛GTI 亚洲大会发表演讲时提到&#xff0c;大唐电信旗下联芯科技…

基于CPC模型的精益服务运营管理

为了更好的产品找到最有需求的客户&#xff0c;让真正有需求的客户找到最需要的好产品&#xff0c;这是企业服务运营中最佳的客户接触管理状态。 然而我们也注意到&#xff0c;科技的发展给企业带来更多传递信息、接触客户的方式&#xff0c;但客户却越来越难以从中找到合适的信…

TD-LTE发牌后,三大运营商会做什么?

12月4日&#xff0c;在媒体猜测了若干发牌日期之后&#xff0c;工信部终于发放4G牌照&#xff0c;让年内发放4G牌照这一承诺成为现实&#xff0c;当然&#xff0c;几家欢喜几家愁&#xff0c;只发了TD-LTE牌照势必对三家运营商的影响各有不同&#xff0c;在此做一简要分析。 在…

演讲丨中兴通讯董事长赵先明--物联网正引发第四次工业革命

C114讯 GOOGLE董事长埃里克施密特关于“互联网即将消失”的话音未冷&#xff0c;近日&#xff0c;中兴通讯董事长赵先明在2016世界移动大会上海展上发表演讲《IOT联接万物&#xff0c;联生价值》&#xff0c;称物联网IOT应用场景多样、前景广泛&#xff0c;除了在第四次工业革命…

NB-IoT规模商用在即 运营商争夺万亿物联网市场

在近日举行的上海2016移动世界大会期间&#xff0c;中兴通讯副总裁陈杰表示&#xff0c;随着有关技术标准的出台&#xff0c;未来十年物联网尤其是移动物联网将迎来巨大的发展。 预计到2020年&#xff0c;物联网市场规模将超过1.7万亿美元&#xff0c;到2025年全球物联网设备将…