差分约束系统+(矩阵)思维(H - THE MATRIX PROBLEM HDU - 3666 )
题目链接:https://cn.vjudge.net/contest/276233#problem/H
题目大意:对于给定的矩阵 每一行除以ai 每一列除以bi 之后 数组的所有元素都还在那个L-R范围之内,a[i]和b[j]是不知道的,然后问你是否有这样的数组a和数组b满足条件。
具体思路:我们可以写出这样的等式,
L<=Map[i][j]*a[i]/b[j]<=R,
然后继续化简 L/Map[i][j]<=a[i]/b[j]<=R/Map[i][j],
然后两边同时取log,就变成了 log(L/Map[i][j])<=log(a[i])-log(b[j])<=log(R/Map[i][j])。
然后我们就可以建边了,把log(a[i])和log(b[j])分别看成点(因为建边只考虑起点,终点,权值,而对于这个式子,边权是知道的,起点和终点可以抽象成点),然后通过差分建边就可以了,判断有没有负环,如果有负环,就代表没有可行解,否则就代表有可行解。
这个题还需要有一个优化,在判断负环的时候,我们可以直接判断他的入队列次数是不是大于sqrt(n+m),如果大于就肯定存在负环(这个好像不太稳定,以后如果这种题超时实在改不了的话,可以尝试一下这个优化)。
AC代码:
#include<iostream>
#include<cstring>
#include<stack>
#include<iomanip>
#include<cmath>
#include<queue>
#include<algorithm>
#include<stdio.h>
using namespace std;
# define ll long long
# define inf 0x3f3f3f3f
const int maxn = 800+100;
struct node
{
int to;
int nex;
double cost;
} edge[maxn*maxn];
int n,m,l,r;
int head[maxn],num,vis[maxn],out[maxn];
double dis[maxn];
void init()
{
num=0;
for(int i=0; i<=n+m+100; i++)
{
head[i]=-1;
dis[i]=inf*1.0;
vis[i]=0;
out[i]=0;
}
}
void addedge(int fr,int to,double cost)
{
edge[num].to=to;
edge[num].cost=cost;
edge[num].nex=head[fr];
head[fr]=num++;
}
int spfa()
{
vis[1]=1;
dis[1]=0;
queue<int>q;
q.push(1);
while(!q.empty())
{
int tmp=q.front();
q.pop();
if(++out[tmp]>(int)sqrt(n+m))
return -1;
vis[tmp]=0;
for(int i=head[tmp]; i!=-1; i=edge[i].nex)
{
int u=edge[i].to;
if(dis[u]>dis[tmp]+edge[i].cost)
{
dis[u]=dis[tmp]+edge[i].cost;
if(vis[u])
continue;
vis[u]=1;
q.push(u);
}
}
}
return 1;
}
int main()
{
while(~scanf("%d %d %d %d",&n,&m,&l,&r))
{
init();
int tmp;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
scanf("%d",&tmp);
double r1=log(r*1.0/(tmp*1.0));
double l1=log(l*1.0/(tmp*1.0));
addedge(i,j+n,r1);
addedge(j+n,i,-l1);
}
}
int ans=spfa();
if(ans==-1)
printf("NO\n");
else
printf("YES\n");
}
return 0;
}
差分约束系统+(矩阵)思维(H - THE MATRIX PROBLEM HDU - 3666 )的更多相关文章
- HDU 3666.THE MATRIX PROBLEM 差分约束系统
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 3666 THE MATRIX PROBLEM (差分约束,最短路)
题意: 给一个n*m矩阵,每个格子上有一个数字a[i][j],给定L和U,问:是否有这样两个序列{a1...an}和{b1...bn},满足 L<=a[i][j]*ai/bj<=U .若存 ...
- hdoj--3666--THE MATRIX PROBLEM(差分约束+SPFA深搜)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 3666 THE MATRIX PROBLEM (差分约束 深搜 & 广搜)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- bzoj 4500: 矩阵 差分约束系统
题目: Description 有一个n*m的矩阵,初始每个格子的权值都为0,可以对矩阵执行两种操作: 选择一行, 该行每个格子的权值加1或减1. 选择一列, 该列每个格子的权值加1或减1. 现在有K ...
- UVA11478 Halum [差分约束系统]
https://vjudge.net/problem/UVA-11478 给定一个有向图,每条边都有一个权值.每次你可以选择一个结点v和一个整数d,把所有以v为终点的边的权值减小d,把所有以v为起点的 ...
- Looksery Cup 2015 H. Degenerate Matrix 数学
H. Degenerate Matrix Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/549/ ...
- THE MATRIX PROBLEM
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- UVA - 11090 - Going in Cycle!!(二分+差分约束系统)
Problem UVA - 11090 - Going in Cycle!! Time Limit: 3000 mSec Problem Description You are given a we ...
随机推荐
- QTime的本质上是一个int,QDateTime本质上是一个qint64
研究这个问题的起因发现使用<=比较时间的不准确,所以怀疑是一个浮点数(Delphi里的time就是一个浮点数).结果却发现是一个int class Q_CORE_EXPORT QTime { e ...
- userData Behavior
https://msdn.microsoft.com/zh-cn/vstudio/ms531424 userData Behavior This topic documents a feature o ...
- 【uoj#209】[UER #6]票数统计 组合数+乱搞
题目描述 一个长度为 $n$ 的序列,每个位置为 $0$ 或 $1$ 两种.现在给出 $m$ 个限制条件,第 $i$ 个限制条件给出 $x_i$ .$y_i$ ,要求至少满足以下两个条件之一: 序列的 ...
- Bank Robbery LightOJ - 1163(推方程 注意计算机的计算方式)
题意:一个数A,如果A去掉它的最后一位就变成了B,即B=A/10,给A - B,求A #include <iostream> #include <cstdio> #includ ...
- eclipse 重装了tomcat后配置路径
在Windows->Preferences->Server->Runtime Environments把先前的工程Servers删除掉
- Python画统计图
https://blog.csdn.net/jenyzhang/article/details/52046372
- Vue里边接口访问Post、Get
原文地址: http://www.cnblogs.com/JimmyBright/p/7356502.html 通常js里面都用ajax来和服务器交换数据,Vue里边当然也可以用ajax,ajax是基 ...
- ZABBIX 3.4 监控Nginx 状态(七)
一.环境准备 1.在nginx的配置文件中,添加status配置 location /nginx_status { stub_status on; ...
- ASP.NET MVC API 接口验证
项目中有一个留言消息接口,接收其他系统的留言和展示留言,参考了网上的一些API验证方法,发现使用通用权限管理系统提供的验证方法最完美(http://www.cnblogs.com/jirigala/p ...
- CentOS7.3 部署Haproxy 1.7.2
haproxy:http://www.haproxy.org/ 本文涉及haproxy的安装,并做简单配置. 一.环境准备 1. 操作系统 CentOS-7-x86_64-Everything-151 ...