第一次看这个题目,完全不知道怎么做,看起来又像是可以建个图进行搜索,但题目条件就给了你几个不等式,这是怎么个做法。。。之后google了下才知道还有个差分约束这样的东西,能够把不等式化成图,要求某个点在满足所有不等式的情况下的最大取值,只需对建好的图进行一次最短路即可

不过要使得a b 点满足这样 a<=b+k这种不等式,还得对题目所给的不等式进行下改装

原不等式无非就是 输入个 si ni,使得存在 A(si)+...A(si+ni)<k 或者 >k,我们新定义一个s[],s[i]代表从1 到 i的所有的点的和,这样,原不等式就会变成 s[si+ni]-s[si-1]>=k+1  或者 小于=k-1,进行下移项,即可变成差分约束不等式的形式,这样每个点的含义就是 对应的s[i]。

此外注意添加一个超级原点 N+1,跟所有点进行下连通,保证图的连通性。

其实题目还有个难点就是,他求是否能满足着m个不等式,如果不满足,意味着有相互冲突的不等式,也就是某个点值既可能正也可能负,也就是说图上存在负环。。。。这个转换确实比较难推敲,尤其是像我这种对图论题目还只是入门的菜鸟。

因此,建好图后,只需用SPFA遍历一下,判断有无负环即可。

此外,还有个疑惑,就是差分约束一定要有等于吗?就像上面的式子,如果不是为了满足=的条件,就不必用k+1和k-1来代替原来的k了。。。这个还有待考证

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define N 250
using namespace std;
int u[N],v[N],w[N],nt[N],ft[N/],d[N/],num[N/],vis[N/];
int n,m,cnt,flag;
void addedge(int a,int b,int c)
{
u[cnt]=a;
v[cnt]=b;
w[cnt]=c;
nt[cnt]=ft[a];
ft[a]=cnt++;
}
void spfa()
{
int i,j;
for (i=;i<=n;i++)
d[i]=<<;
memset(num,,sizeof num);
memset(vis,,sizeof vis);
flag=;
d[n+]=;
queue <int> q;
q.push(n+);
vis[n+]=;
while (!q.empty())
{
int x=q.front();
q.pop();
vis[x]=;
num[x]++;
if (num[x]>n)
{
flag=;
return;
}
for (i=ft[x];i>=;i=nt[i])
{
int nx=v[i];
if (d[nx]>d[x]+w[i])
{
d[nx]=d[x]+w[i];
if (!vis[nx])
{
q.push(nx);
vis[nx]=;
}
}
}
} }
int main()
{
int i,j;
char ch[];
while (scanf("%d",&n))
{
if (!n) break;
cnt=;
scanf("%d",&m);
int a,b,k,si,ni;
memset(ft,-,sizeof ft);
for (i=;i<=m;i++)
{
scanf("%d%d%s%d",&si,&ni,ch,&k);
if (ch[]=='g')
{
addedge(si+ni,si-,(-k-));//用差分约束不等式建图,下同
}
else
{
addedge(si-,si+ni,k-);
}
}
for (i=;i<=n;i++) //将n+1作为超级原点进行连通。
addedge(n+,i,);
spfa();
if (flag)
{
puts("lamentable kingdom"); }
else puts("successful conspiracy");
}
return ;
}

UVA 515 差分约束 SPFA判负的更多相关文章

  1. BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)

    BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多少权值, ...

  2. POJ——1364King(差分约束SPFA判负环+前向星)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11946   Accepted: 4365 Description ...

  3. POJ 1364 King (UVA 515) 差分约束

    http://poj.org/problem?id=1364 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...

  4. [luoguP1993] 小 K 的农场(差分约束 + spfa 判断负环)

    传送门 差分约束系统..找负环用spfa就行 ——代码 #include <cstdio> #include <cstring> #include <iostream&g ...

  5. UVA 558 Wormholes 【SPFA 判负环】

    题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  6. 洛谷P3275 [SCOI2011]糖果_差分约束_判负环

    Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; co ...

  7. poj 1364 King(线性差分约束+超级源点+spfa判负环)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14791   Accepted: 5226 Description ...

  8. O - Layout(差分约束 + spfa)

    O - Layout(差分约束 + spfa) Like everyone else, cows like to stand close to their friends when queuing f ...

  9. POJ 3259 Wormholes(SPFA判负环)

    题目链接:http://poj.org/problem?id=3259 题目大意是给你n个点,m条双向边,w条负权单向边.问你是否有负环(虫洞). 这个就是spfa判负环的模版题,中间的cnt数组就是 ...

随机推荐

  1. [JZOJ]1293.气象牛[区间DP]

    Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1-M_N(1 <= M_i <= 1 ...

  2. Bean Java配置

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  3. sql select 0 字段 某字段是不在指定的表

    sql select 0 字段 转自   关于 select 语句中 0 某字段名字,的意思是:该某字段是不在指定的表中的,那么如果要在子查询中利用这个指定的表,且带有这个字段,那么就用这个方式来添加 ...

  4. hdu 1257 最少拦截系统 求连续递减子序列个数 (理解二分)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. spring 动态bean注册

    1. import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory. ...

  6. 大数据之虚拟机配置和环境准备及hadoop集群搭建

    一.VMnet1和VMnet8路由器 VMware-workstation软件选择默认安装时,会自动创建VMnet1和VMnet8路由器设备.(安装失败使用CCleaner清理vm软件) VMnet1 ...

  7. 关于springmvc的消息转换器

    之前有用到消息转换器,一直是配置configureMessageConverters()这个方法的,虽然知道也有extendMessageConverters().它们的区别的是第一个不会继承框架默认 ...

  8. ROS常见问题(一) 安装ROS时sudo rosdep init指令报错 最全解决方法

    安装ROS时sudo rosdep init指令报错: ERROR: cannot download default sources list from: https://raw.githubuser ...

  9. 下载jQuery

    下载jQuery :https://jquery.com/download/ . 将下载好的文件放到项目中 引入到代码中 <script type="text/javascript&q ...

  10. <mvc:default-servlet-handler />说明

    优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...