差分约束系统+(矩阵)思维(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 ...
随机推荐
- js 小程序获取本周七天
data: { weekdays:['','','','','','',''] }, onLoad: function (options) { let that = this; let now ...
- hdu 1556 Color the ball(树状数组)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意:N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数[a,b]之间的气球 ...
- 本地存储—localStorage(HTML5)
https://my.oschina.net/jgy/blog/99631 localStorage简介 今夜死活睡不着,决定整理下最近搞得localStorage…… 先简单说下阐述下:localS ...
- luogu P2992 [USACO10OPEN]三角形计数Triangle Counting
https://www.luogu.org/problemnew/solution/P2992 考虑包含原点,不包含原点的三角形有什么特征. 包含原点的三角形:任意找一个顶点和原点连线,一定能把另外两 ...
- C++ STL 常用算术和生成算法
C++ STL 常用算术和生成算法 accumulate() accumulate: 对指定范围内的元素求和,然后结果再加上一个由val指定的初始值. #include<numeric> ...
- Android Data Binding(数据绑定)用户指南
Android Data Binding(数据绑定)用户指南 http://www.jianshu.com/p/b1df61a4df77 https://github.com/LyndonChin/M ...
- js中apply(thisArg, [argsArray])的参数与ArrayLike的关系
你是否写过或见到过这样的代码 xx.apply(this,slice.call(arguments)) //slice.call转为数组是否多余 mdn地址 msdn地址 一.微软和mdn对参数的介绍 ...
- 【整体二分】【P3527】 [POI2011]MET-Meteors
Description 有 n 个国家,总共占有一个环,环被分成了 m 段,已知有 k 次流星雨会落在这个环上的一些位置.再给出每个国家目标收集多少流星,对每个国家求出第几次流星雨后可以满足这个国家的 ...
- web项目中配置文件的加载顺序
当一个项目启动时,首先是web.xml: 这里面的配置: 为什么要在web.xml中配置struts的过滤器? 因为一个web项目运行的时需要加载的,或者默认的部分配置都会在web.xml中配置,中间 ...
- 【Asp.net入门06】第一个ASP.NET 应用程序-案例说明
创建简单的应用程序 本章的剩余部分将探讨一些用于创建简单的数据输入应用程序的基本ASP.NET功能.在这一节中,我们将加快进度——目标是演示ASP.NET的用法,因此将略过有关后台运行机制的详细说明. ...