http://poj.org/problem?id=1364

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=456

题目大意:

有一串序列,A={a1,a2,……an};

然后给你一些信息,判断是否有解

4 2 

1 2 gt 0   表示a1+a2+a3>0

2 2 lt 2    表示 a2+a3+a4<2

思路:

还是差分约束,不过值得注意的是我们要把小于号和大于号改为<=和>=

也就是说a1+a2+a3>=1     a2+a3+a4<=2

设S[I]为前i项和, 如果为大于号有

S[ to + from] - s[from -1]>=val+1

小于号有:

s[to+from] - s[from - 1]<= val -1

变形得:

s[from - 1] -s[to+from]>=1-val

然后把n+1作为附加点,保证图的连通性。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<queue>
  4. using namespace std;
  5. const int MAXN=100+10;
  6. const int MAXM=100+10;
  7. const int INF=-9999999;
  8. struct edge
  9. {
  10. int to;
  11. int val;
  12. int next;
  13. }e[MAXM];
  14. int head[MAXN],dis[MAXN],len,n,m;
  15.  
  16. void add(int from,int to,int val)
  17. {
  18. e[len].to=to;
  19. e[len].val=val;
  20. e[len].next=head[from];
  21. head[from]=len++;
  22. }
  23.  
  24. bool spfa()
  25. {
  26. for(int i=0;i<=n;i++)
  27. dis[i]=INF;
  28. int start=n+1;
  29. queue<int> q;
  30. bool vis[MAXN]={0};
  31. int cnt[MAXN]={0};
  32. q.push(start);
  33. vis[start]=1;
  34. cnt[start]=1;
  35. dis[start]=0;
  36. while(!q.empty())
  37. {
  38. int cur= q.front();
  39. q.pop();
  40. vis[cur]=false;
  41.  
  42. for(int i=head[cur];i!=-1;i=e[i].next)
  43. {
  44. int id=e[i].to;
  45. if(dis[id] < dis[cur]+e[i].val)
  46. {
  47. dis[id]=dis[cur]+e[i].val;
  48. if(!vis[id])
  49. {
  50. cnt[id]++;
  51. if(cnt[cur]>n)
  52. return true;
  53. vis[id]=true;
  54. q.push(id);
  55. }
  56. }
  57. }
  58. }
  59. return false;
  60. }
  61. int main()
  62. {
  63. while(~scanf("%d",&n),n)
  64. {
  65. len=0;
  66. memset(head,-1,sizeof(head));
  67.  
  68. scanf("%d",&m);
  69. for(int i=0;i<m;i++)
  70. {
  71. int from,to,val;
  72. char cmd[5];
  73. scanf("%d%d%s%d",&from,&to,cmd,&val);
  74. if(strcmp(cmd,"gt")==0)
  75. add(from-1,to+from,val+1);
  76. else
  77. add(to+from,from-1,-val+1);
  78. }
  79.  
  80. for(int i=0;i<=n;i++)
  81. add(n+1,i,0);
  82.  
  83. if(spfa())
  84. puts("successful conspiracy");
  85. else
  86. puts("lamentable kingdom");
  87. }
  88. return 0;
  89. }

POJ 1364 King (UVA 515) 差分约束的更多相关文章

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

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

  2. POJ 1364 / HDU 3666 【差分约束-SPFA】

    POJ 1364 题解:最短路式子:d[v]<=d[u]+w 式子1:sum[a+b+1]−sum[a]>c      —      sum[a]<=sum[a+b+1]−c−1  ...

  3. UVA 515 差分约束 SPFA判负

    第一次看这个题目,完全不知道怎么做,看起来又像是可以建个图进行搜索,但题目条件就给了你几个不等式,这是怎么个做法...之后google了下才知道还有个差分约束这样的东西,能够把不等式化成图,要求某个点 ...

  4. poj 1364 King(差分约束)

    题意(真坑):傻国王只会求和,以及比较大小.阴谋家们想推翻他,于是想坑他,上交了一串长度为n的序列a[1],a[2]...a[n],国王作出m条形如(a[si]+a[si+1]+...+a[si+ni ...

  5. POJ 1364 King (差分约束)

    King Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8660   Accepted: 3263 Description ...

  6. POJ 1364 King --差分约束第一题

    题意:求给定的一组不等式是否有解,不等式要么是:SUM(Xi) (a<=i<=b) > k (1) 要么是 SUM(Xi) (a<=i<=b) < k (2) 分析 ...

  7. [poj 1364]King[差分约束详解(续篇)][超级源点][SPFA][Bellman-Ford]

    题意 有n个数的序列, 下标为[1.. N ], 限制条件为: 下标从 si 到 si+ni 的项求和 < 或 > ki. 一共有m个限制条件. 问是否存在满足条件的序列. 思路 转化为差 ...

  8. POJ 1364 King

    http://poj.org/problem?id=1364 题意 :给出一个序列a1,a2,a3,a4.....ai,......at ;然后给你一个不等式使得ai+a(i+1)+a(i+2)+.. ...

  9. POJ 1275 Cashier Employment(差分约束)

    http://poj.org/problem?id=1275 题意 : 一家24小时营业的超市,要雇出纳员,需要求出超市每天不同时段需要的出纳员数,午夜只需一小批,下午需要多些,希望雇最少的人,给出每 ...

随机推荐

  1. js---12数据类型,数据类型转换,NaN,

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  2. Linux下MySQL允许远程连接以及授权命令

    --针对某个库做授权 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; ...

  3. id---显示用户ID

    d命令   id命令可以显示真实有效的用户ID(UID)和组ID(GID).UID 是对一个用户的单一身份标识.组ID(GID)则对应多个UID 语法 id [-gGnru][--help][--ve ...

  4. Windows学习总结(3)——成为电脑高手必备的cmd命令大全

    曾经看电影和电视里面电脑黑客快速敲击电脑键盘,一行行命令在电脑屏幕闪过,一个回车过后,一排排英文象走马灯一样在屏幕上转瞬即逝,那才是我们梦寐以求的高手,有木有!实际上,不光是黑客和系统维护人员,一般的 ...

  5. oracle取随机结果测试

    http://www.2cto.com/database/201307/227524.html

  6. [leetcode] Palindrome Number(不使用额外空间)

    本来推断回文串是一件非常easy的事情,仅仅须要反转字符串后在与原字符串相比較就可以.这道题目明白说明不能使用额外的空间.那么使用将其分解连接成字符串的方法便不是可行的.仅仅好採用数学的方式: 每次取 ...

  7. 从头认识Spring-2.3 注解装配-@autowired(4)-required(1)

    这一章节我们来具体讨论一下@autowired里面的參数required. 1.domain(重点) 蛋糕类: package com.raylee.my_new_spring.my_new_spri ...

  8. 中间件 —— 消息中间件(MOM)

    维基百科对消息中间件的定义为:Message-oriented middleware (MOM) is software or hardware infrastructure supporting s ...

  9. Manning.EJB.3.in.Action.2nd.Edition

    Manning.EJB.3.in.Action.2nd.Edition http://files.cnblogs.com/files/rojas/EJB_3_in_Action_2nd_Edition ...

  10. 很好的资源 for android

    //texttospeach http://examples.javacodegeeks.com/android/core/text-to-speech/android-text-to-speech- ...