题目

多组询问,给定一个\(n*m\)的矩阵\(C\)和一个区间\([L,R]\),

问是否存在一个长度为\(n\)的序列\(A\)和一个长度为\(m\)的序列\(B\),

使得所有

\[\frac{A_i}{B_j}C_{i,j}\in [L,R]
\]

不需要输出具体方案


分析

这其实是一个不等式,变量是\(A_i\)和\(B_j\),这样可以化简成

\[\frac{L}{C_{i,j}}\leq \frac{A_i}{B_j}\leq \frac{R}{C_{i,j}}
\]

这样不够好做,考虑把它化成对数的形式,即是

\[\log(L)-\log(C_{i,j})\leq \log(A_i)-\log(B_j)\leq \log(R)-\log(C_{i,j})
\]

按照这个建图判断有没有负环即可,有负环就是无解

但是bfs版的spfa会TLE,考虑SLF优化,只跑了700ms(但是这样更容易被卡掉)


代码

  1. #include <cstdio>
  2. #include <cctype>
  3. #include <cmath>
  4. #include <deque>
  5. #define rr register
  6. using namespace std;
  7. const int N=811; deque<int>q;
  8. int v[N],cnt[N],as[N],S,n,m,et; double dis[N],l,r;
  9. struct node{int y; double w; int next;}e[N*N>>1];
  10. inline signed iut(){
  11. rr int ans=0,f=1; rr char c=getchar();
  12. while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
  13. while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
  14. return ans*f;
  15. }
  16. inline void add(int x,int y,double w){
  17. e[++et]=(node){y,w,as[x]},as[x]=et;
  18. }
  19. inline bool spfa(){
  20. while (!q.empty()) q.pop_front();
  21. for (rr int i=1;i<=S;++i)
  22. dis[i]=1e18,v[i]=cnt[i]=0;
  23. q.push_back(S); dis[S]=0,v[S]=1;
  24. while (!q.empty()){
  25. rr int x=q.front(); q.pop_front();
  26. for (rr int i=as[x];i;i=e[i].next)
  27. if (dis[e[i].y]>dis[x]+e[i].w){
  28. dis[e[i].y]=dis[x]+e[i].w;
  29. if (++cnt[e[i].y]>=S) return 0;
  30. if (!v[e[i].y]){
  31. v[e[i].y]=1;
  32. if (!q.empty()&&dis[e[i].y]<dis[q.front()]) q.push_front(e[i].y);
  33. else q.push_back(e[i].y);
  34. }
  35. }
  36. v[x]=0;
  37. }
  38. return 1;
  39. }
  40. signed main(){
  41. while (scanf("%d",&n)==1){
  42. m=iut(),S=n+m+1,et=0,
  43. l=log(iut()),r=log(iut());
  44. for (rr int i=1;i<=S;++i) as[i]=0;
  45. for (rr int i=1;i<S;++i) add(S,i,0);
  46. for (rr int i=1;i<=n;++i)
  47. for (rr int j=1;j<=m;++j){
  48. rr double x=log(iut());
  49. add(i,j+n,r-x),add(j+n,i,x-l);
  50. }
  51. puts(spfa()?"YES":"NO");
  52. }
  53. return 0;
  54. }

#差分约束系统,Spfa,SLF优化#HDU 3666 THE MATRIX PROBLEM的更多相关文章

  1. HDU 3666.THE MATRIX PROBLEM 差分约束系统

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  2. HDU 3666 THE MATRIX PROBLEM (差分约束,最短路)

    题意: 给一个n*m矩阵,每个格子上有一个数字a[i][j],给定L和U,问:是否有这样两个序列{a1...an}和{b1...bn},满足 L<=a[i][j]*ai/bj<=U .若存 ...

  3. HDU 3666 THE MATRIX PROBLEM (差分约束 深搜 & 广搜)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. hdu 3666 THE MATRIX PROBLEM

    差分约束系统. 根据题意,可以写出不等式 L <= (Xij * Ai) / Bj <= U 即 Ai/Bj<=U/Xij和Ai/Bj>=L/Xij 由于差分约束系统是减法.. ...

  5. HDU 3666 THE MATRIX PROBLEM (差分约束)

    题意:给定一个最大400*400的矩阵,每次操作可以将某一行或某一列乘上一个数,问能否通过这样的操作使得矩阵内的每个数都在[L,R]的区间内. 析:再把题意说明白一点就是是否存在ai,bj,使得l&l ...

  6. [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化

    Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...

  7. spfa + slf优化

    最近在练习费用流 , 不是要用spfa吗 ,我们教练说:ns学生写朴素的spfa说出去都让人笑 . QwQ,所以就去学了一下优化 . slf优化就是双向队列优化一下,本来想用lll优化,可是优化后我t ...

  8. 差分约束系统 + spfa(A - Layout POJ - 3169)

    题目链接:https://cn.vjudge.net/contest/276233#problem/A 差分约束系统,假设当前有三个不等式 x- y <=t1 y-z<=t2 x-z< ...

  9. 【差分约束系统/SPFA】POJ3169-Layout

    [题目大意] n头牛从小到大排,它们之间某些距离不能大于一个值,某些距离不能小于一个值,求第一头牛和第N头牛之间距离的最大值. [思路] 由题意可以得到以下不等式d[AL]+DL≥d[BL]:d[BD ...

  10. 初识费用流 模板(spfa+slf优化) 餐巾计划问题

    今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...

随机推荐

  1. 类型注解Callable

    from collections.abc import Callable """ Callable[[ParamType1, ParamType2], ReturnTyp ...

  2. 【Java复健指南08】OOP中级03【完结】-Object类和一些练习

    前情回顾:https://www.cnblogs.com/DAYceng/category/2227185.html Object类 equals方法 "=="与equals的区别 ...

  3. 【Azure Developer】在微软云中国区,如何使用Microsoft GraphAPI连接到B2C Tenant

    问题描述 如题所述,当在中国区使用Microsoft GraphAPI连接B2C Tenant时候,如何来设置中国区的Endpoint呢?在GitHub的示例中,并没有示例介绍如何连接中国区.如 问题 ...

  4. SpringCloudStream消息驱动

    1. 基本介绍 官方文档: https://spring.io/projects/spring-cloud-stream#learn 背景: 在一般的大型项目中,或者分布式微服务结构的系统里,一般都会 ...

  5. vscode 两种定位跳转的方法 ctrl+p 方法1 path:行号 方法2 #变量名 - 针对$store变量不好找的方案 方法1可以备注在代码里面

    vscode 两种定位跳转的方法 ctrl+p 方法1 path:行号 方法2 #变量名 - 针对$store变量不好找的方案 方法1可以备注在代码里面 问题 $store的变量不能跳转,有跳转插件也 ...

  6. vue 可选链 功能 ?. 替代 res && res.status 可以变成 res?.status

    安装 cnpm install --save-dev @babel/plugin-proposal-optional-chaining .babelrc { "presets": ...

  7. Sub-process /usr/bin/dpkg returned an error code (1)问题

    在用apt-get安装软件包的时候遇到E: Sub-process /usr/bin/dpkg returned an error code (1)问题,解决方法如下: cd /var/lib/dpk ...

  8. 基于六轴传感器MPU6050的物体移动监测报警系统

    一 系统简介 1.简介 MPU-60x0 是全球首例 9 轴运动处理传感器.它集成了 3 轴MEMS陀螺仪,3 轴MEMS加速度计,以及一个可扩展的数字运动处理器 DMP(Digital Motion ...

  9. ModuleNotFoundError: No module named xxx 的原因和解决办法(附带新大陆)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  10. 常用命令rsyncscp-1

    常用命令:rsync/scp scp scp命令文件传输 scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能 ...