CF576D Flights for Regular Customers 矩阵乘法 + Bitset优化
2024-10-07 12:59:11
Codeforces 576D Flights for Regular Customers(矩阵加速DP)
代码非常优美 + 简洁,学习到了
Code:
#include <bits/stdc++.h>
#define N 160
#define inf 0x3f3f3f3f
#define maxn 1000000
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,m,ans=inf;
int dis[N][N], f[N][N];
int cnt;
bitset<N> can[N], now[N], tmp[N], base[N];
struct Node
{
int x,y,d;
void scan() { scanf("%d%d%d",&x,&y,&d); }
friend bool operator < (const Node &a, const Node &b)
{
return a.d < b.d;
}
}e[N];
void Mul(bitset<N>*a,bitset<N>*b)
{
bitset<N>ret[N];
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j) if(a[i][j]) ret[i]|=b[j];
for(int i=1;i<=n;++i) a[i]=ret[i];
}
void Pow(bitset<N>*a,int b)
{
bitset<N>ret[N];
for(int i=1;i<=n;++i) ret[i][i]=1;
for(;b;b>>=1)
{
if(b&1) Mul(ret, a);
Mul(a,a);
}
for(int i=1;i<=n;++i) a[i]=ret[i];
}
int main()
{
// setIO("input");
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i) e[i].scan();
sort(e+1,e+1+m);
for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) dis[i][j]=inf;
for(int i=1;i<=n;++i) dis[i][i]=0;
cnt=0,ans=inf;
for(int i=1;i<=n;++i) can[i][i]=1;
for(int i=1;i<=m;++i)
{
int x=e[i].x,y=e[i].y,d=e[i].d;
for(int j=1;j<=n;++j) tmp[j]=base[j];
Pow(tmp, d-cnt);
Mul(can,tmp);
for(int j=1;j<=n;++j) for(int k=1;k<=n;++k) dis[j][k]=min(dis[j][k], dis[j][x]+1+dis[y][k]);
for(int j=1;j<=n-1;++j) if(can[1][j]) ans=min(ans, d + dis[j][n]);
cnt=d;
base[x][y]=1;
}
if(ans<0x3f3f3f3f) printf("%d\n",ans);
else printf("Impossible\n");
return 0;
}
最新文章
- LeetCode: 3Sum
- window下的各种宽高度小结
- s:iterator,s:if与OGNL的嵌套使用
- PayPal 高级工程总监:读完这 100 篇文献,就能成大数据高手
- MT写的对URL操作的两个方法
- Java8 如何进行stream reduce,collection操作
- NodeJS: 处理request网页乱码问题
- POJ1941 The Sierpinski Fractal
- centos 6.5 samba简单配置
- 将数组之中的省份市区地区ID改成对用中文字符
- Hessian(C#)介绍及使用说明
- DOM操作HTML文档
- 自古枪兵幸运E
- JS的深度克隆,利用构造函数原型深度克隆
- VMPlayer Ubuntu 16.04 Copy and Paste with Host 主机与宿机之间的复制粘贴
- SPARK安装二:HADOOP集群部署
- HTML转义符
- swift 基本用法
- 也来说说C#异步委托 (转自 Rising_Sun)
- 主存储器与CPU的连接
热门文章
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_1_HashSet集合介绍
- 解决Nginx反向代理不会自动对特殊字符进行编码的问题 如gitblit中的~波浪线
- redis集群安装多端口多实例部署
- 使用pyautogui替代selenium,图像识别进行web自动化测试--基于python语言
- Java实验报告(一)&;&;第三周学习总结
- SpringBoot 使用JPA+MySQL+Thymeleaf 总结 一
- 2019南京网络赛E:K Sum
- Spring Boot & ES 实战,值得参考!
- 手动刷新客户端配置内容(Spring Cloud Config)
- 浏览器是怎样工作的:渲染引擎,HTML解析(连载二)