%%%cxhscst2's blog

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;
}

  

最新文章

  1. LeetCode: 3Sum
  2. window下的各种宽高度小结
  3. s:iterator,s:if与OGNL的嵌套使用
  4. PayPal 高级工程总监:读完这 100 篇文献,就能成大数据高手
  5. MT写的对URL操作的两个方法
  6. Java8 如何进行stream reduce,collection操作
  7. NodeJS: 处理request网页乱码问题
  8. POJ1941 The Sierpinski Fractal
  9. centos 6.5 samba简单配置
  10. 将数组之中的省份市区地区ID改成对用中文字符
  11. Hessian(C#)介绍及使用说明
  12. DOM操作HTML文档
  13. 自古枪兵幸运E
  14. JS的深度克隆,利用构造函数原型深度克隆
  15. VMPlayer Ubuntu 16.04 Copy and Paste with Host 主机与宿机之间的复制粘贴
  16. SPARK安装二:HADOOP集群部署
  17. HTML转义符
  18. swift 基本用法
  19. 也来说说C#异步委托 (转自 Rising_Sun)
  20. 主存储器与CPU的连接

热门文章

  1. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_1_HashSet集合介绍
  2. 解决Nginx反向代理不会自动对特殊字符进行编码的问题 如gitblit中的~波浪线
  3. redis集群安装多端口多实例部署
  4. 使用pyautogui替代selenium,图像识别进行web自动化测试--基于python语言
  5. Java实验报告(一)&amp;&amp;第三周学习总结
  6. SpringBoot 使用JPA+MySQL+Thymeleaf 总结 一
  7. 2019南京网络赛E:K Sum
  8. Spring Boot & ES 实战,值得参考!
  9. 手动刷新客户端配置内容(Spring Cloud Config)
  10. 浏览器是怎样工作的:渲染引擎,HTML解析(连载二)