第一次看这个题目,完全不知道怎么做,看起来又像是可以建个图进行搜索,但题目条件就给了你几个不等式,这是怎么个做法。。。之后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 ;
}

最新文章

  1. linux c 笔记-1
  2. MyBatis执行过程显示SQL语句的log4j配置
  3. 502 bad gateway 错误
  4. Junit单元测试学习笔记三
  5. Informatica9.6.1在Linux Red Hat 5.8上安装遇到的有关问题整理_1
  6. 从敏捷开发到小团队SVN
  7. currentStyle和getComputedStyle的兼容写法
  8. 高精度之+&times;&divide;
  9. Sql Server——约束
  10. zTree实现地市县三级级联Service接口测试
  11. DBUtils源码分析
  12. Windows上安装配置SSH教程(5)——win10下使用Cygwin+Expect自动登陆ssh
  13. (线段判交的一些注意。。。)nyoj 1016-德莱联盟
  14. html中src与href的区别
  15. java 实现自定义事件
  16. 【062有新题】OCP 12c 062出现大量之前没有的新考题-16
  17. flask开发的CMS管理系统
  18. linux centos7最小化安装NAT模式网络设置
  19. 洛谷 P1073 最优贸易
  20. python自编程序实现——robert算子、sobel算子、Laplace算子进行图像边缘提取

热门文章

  1. Oracle 序列(查询序列的值,修改序列的值)
  2. Compare/ContrastEssay你真的会写了吗?
  3. sql server C#操作。原文在收藏页面
  4. office(CVE-2012-0158)漏洞分析报告
  5. Cobalt Strike简单使用(9,29第十五天)
  6. EUI库 - 9 - 数据集合 - 列表
  7. Day2-T2
  8. Dubbo与Zookeeper 简介
  9. C# ASP 面试题 2017
  10. HTML条件注释判断&lt;!--[if IE] ![endif]--&gt;