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 对不起我又想网络流去了 你看这长得多像啊,走过至少多少条边就是流量下界,然后没上界 但是这个题求的最少走多少条边啊...完 ...
随机推荐
- 最大熵与EM算法
一.熵.联合熵(相当于并集).条件熵.互信息 1.熵是什么? (0)信息量:信息的度量p(xi).信息量和概率成反比,熵是信息量的期望. X是一个随机变量,可能取值有很多个.熵是信息量的期望.熵反应的 ...
- WebService简单使用教程
根据说明书获取信息 代码示例: import com.gyf.weather.ws.ArrayOfString; import com.gyf.weather.ws.WeatherWS; import ...
- python-ssh-远程服务器+远程docker执行命令
在python语言中实现远程服务器执行命令+远程dcoker执行命令 def ssh_exec_command(ip, username, password, cmd=None): "&qu ...
- python-函数3(全局变量与局部变量)
python-函数3(全局变量与局部变量) 全局变量与局部变量 school = "goy edu" 全局变量,在最上面定义的 def change_name(name): glo ...
- 二、Ubuntu16.04安装搜狗wps
1.搜狗: 安装搜狗输入法,下载地址:http://pinyin.sogou.com/linux/(搜索官网下载及安装方法),deb安装方法类似Windows的exe安装,安装后重启生效. 2.wps ...
- java8 新特性,stream的应用
https://www.cnblogs.com/fengli9998/p/9002377.html http://www.runoob.com/java/java8-optional-class.ht ...
- thinkphp之session操作
原理机制 配置部分 代码部分 助手函数 借助第三方介质存入session 从负载均衡角度考虑----最好放在memocache,redis
- C# 泛型 new{ }??? //加new 和不加new 有什么不同? new() 约束
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Python连接MySQL之Python库pymysql
连接数据库 pymysql连接数据库的方式和使用sqlite的方式基本相同: 使用connect创建连接对象 connect.cursor创建游标对象,SQL语句的执行基本都在游标上进行 cursor ...
- 消息队列之--Kafak
序言 消息丢失如何解决? 解耦 异步 并行 Docker安装Kafak 1.下载镜像 # zookeeper镜像 docker pull wurstmeister/zookeeper # kafka镜 ...