1. //差分约束 >=求最长路径 <=求最短路径 结果都一样
    //spfa
    #include<stdio.h>
  2. #include<string.h>
  3. #include<limits.h>
  4. #include<queue>
  5. using namespace std;
  6. #define N 1010
  7. #define M 1010*1010//注意边和点集的数组大小
  8. struct edge
  9. {
  10. int to,value,next;
  11. };
  12. struct edge edges[M];
  13. int heads[N],len=;
  14. int dis[N];
  15. int addedge(int u,int v,int w)
  16. {
  17. edges[len].to=v,edges[len].value=w,edges[len].next=heads[u];
  18. heads[u]=len++;
  19. return ;
  20. }
  21. int n,m;
  22.  
  23. int spfa(int v)
  24. {
  25. queue<int> q;
  26. int inqueue[N];
  27. memset(inqueue,,sizeof(inqueue)),inqueue[v]=;
  28. q.push(v);
  29. for(int i=;i<=n;i++) dis[i]=INT_MIN;
  30. dis[v]=;
  31. int times[N];
  32. memset(times,,sizeof(times)),times[v]=;
  33. int temp=;
  34. while(!q.empty()){
  35. int x=q.front();
  36. q.pop();
  37. inqueue[x]=;
  38.  
  39. for(int i=heads[x];i!=-;i=edges[i].next){
  40. int to=edges[i].to,value=edges[i].value;
  41. if(value+dis[x]>dis[to]){
  42. dis[to]=value+dis[x];
  43.  
  44. if(!inqueue[to]){ //注意已经在队列里面的不用再加入队列
  45. inqueue[to]=,q.push(to);
  46. times[to]++;
  47. if(times[x]>n){
  48. return -;//返回值有可能是0 不能将0作为区别的标记
  49.  
  50. }
  51.  
  52. }
  53. }
  54. }
  55. }
  56. return dis[n];
  57. }
  58. int main(void)
  59. {
  60.  
  61. int i,num;
  62. while(scanf("%d%d",&n,&m)!=EOF){
  63. len=;
  64. memset(heads,-,sizeof(heads));
  65. for(i=;i<=n;i++){
  66. scanf("%d",&num);
  67. addedge(i,i-,-num);
  68. addedge(,i,);
  69. }
  70. for(i=;i<=m;i++){
  71. int u,v,w;
  72. scanf("%d%d%d",&u,&v,&w);
  73. addedge(u-,v,w);
  74. }
  75.  
  76. int h=spfa();
  77. if(h!=-) printf("%d\n",h);
  78. else printf("Bad Estimations\n");
  79.  
  80. }
  81. return ;
  82. }
    //bellman
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. using namespace std;
  6. #define INF 2000000000
  7. int u[12005],v[12005],w[12005],n,m,total,d[1005];
  8. void Edge(int s,int e,int val){
  9. u[total]=s;
  10. v[total]=e;
  11. w[total++]=val;
  12. }
  13. int Bellman(){
  14. int i,e;
  15. for(i=1;i<=n;i++) d[i]=-INF;
  16. d[0]=0;
  17. for(i=1;i<=n;i++){
  18. for(e=0;e<total;e++){
  19. if(d[v[e]]<d[u[e]]+w[e])
  20. d[v[e]]=d[u[e]]+w[e];
  21. }
  22. }
  23. int ans=d[n];
  24. for(e=0;e<total;e++)
  25. if(d[v[e]]<d[u[e]]+w[e]) ans=-1;
  26. return ans;
  27. }
  28. int main(){
  29. int a,b,c,cnt,i;
  30. while(scanf("%d%d",&n,&m)!=EOF){
  31. total=0;
  32. for(i=1;i<=n;i++){
  33. scanf("%d",&c);
  34. Edge(0,i,0);
  35. Edge(i,i-1,-c);
  36. }
  37. for(i=0;i<m;i++){
  38. scanf("%d%d%d",&a,&b,&c);
  39. Edge(a-1,b,c);
  40. }
  41.  
  42. cnt=Bellman();
  43. for(i=0;i<n;i++) printf("%d ",d[i]);
  44. puts("");
  45. if(cnt==-1) cout<<"Bad Estimations\n";
  46. else cout<<cnt<<"\n";
  47. }
  48. return 0;
  49. }
  1.  

  

  1.  

ZOJ 2770 Burn the Linked Camp(spfa&&bellman)的更多相关文章

  1. ZOJ 2770 Burn the Linked Camp 差分约束

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemCode=2770 Burn the Linked Camp Time Limi ...

  2. ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1770 题目大意: 陆逊为了火烧连营七百里,派出了间谍刺探敌情,得之刘备的军营以 ...

  3. zoj 2770 Burn the Linked Camp

    今天刚刚学差分约束系统.利用最短路求解不等式.世界真的好奇妙!感觉不等式漏下几个会导致WA!! #include<cstdio> #include<cstring> #incl ...

  4. zoj 2770 Burn the Linked Camp (差分约束系统)

    // 差分约束系统// 火烧连营 // n个点 m条边 每天边约束i到j这些军营的人数 n个兵营都有容量// Si表示前i个军营的总数 那么 1.Si-S(i-1)<=C[i] 这里 建边(i- ...

  5. Burn the Linked Camp(bellman 差分约束系统)

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

  6. zoj Burn the Linked Camp (查分约束)

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

  7. ZOJ2770 Burn the Linked Camp(差分约束系统)

    区间和一定要联系到前缀和. 这题,把前缀和看作点,从s0到sn: 对于每一个营地i的容量capi,有这么个关系si-si-1<=capi: 对于每一个区间的评估i,j,k,有sj-si-1> ...

  8. zoj2770 Burn the Linked Camp --- 差分约束

    有n个营地,每一个营地至多容纳Ci人.给出m个条件:第i到第j个营地之间至少有k人. 问n个营地总共至少有多少人. 此题显然差分约束.要求最小值.则建立x-y>=z方程组,建图求最长路. 用d[ ...

  9. ZOJ 2770 差分约束+SPFA

    Burn the Linked Camp Time Limit: 2 Seconds      Memory Limit: 65536 KB It is well known that, in the ...

随机推荐

  1. 什么是位、字节、字、KB、MB

    什么是位.字节.字.KB.MB 位:"位(bit)"是电子计算机中最小的数据单位.每一位的状态只能是0或1. 字节:8个二进制位构成1个"字节(Byte)",它 ...

  2. linux----命令替换

    0.命令替换.它的大概意思是.命令在脚本中只起一个站位符的作用:在命令运行时它会被命令自己的执行结果所替换. 1.使用格式: 1.$(command) 2.`command` 2.使用举例: 1.:打 ...

  3. android ViewHolder 使用

    android中使用ListView   ExpandableListView  数据适配器adapter很多都是自己定义,自己定义数据适配器时,要重写getView.重写getView为了不让每次调 ...

  4. SD和SDHC和SDXC卡的区别是什么

    SD卡,SDHC卡,SDXC卡区别在规格不一样,SD卡最大支持2GB容量,SDHC 最大支持32GB容量,SDXC 最大支持2TB(2048GB)容量,支持SDXC卡的数码设备是兼容支持SD卡与SDH ...

  5. 调bug时候应该提高思维深度(多问二十个为什么)

    版权声明:本文为博主原创文章,未经博主允许不得转载. (一)关于思维深度 读书时 有的人做一份卷子有一份卷子的收获 有的人做100张卷子只有一份卷子的收获 写代码时 有的人调一个Bug可以收获多方面的 ...

  6. Mongodb入门并使用java操作Mongodb

    转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...

  7. python-面向对象(二)

    面向对象总结 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例( ...

  8. Java操作mongoDB2.6的常见API使用方法

    对于mongoDB而言,学习方式和学习关系型数据库差不太多 開始都是学习怎样insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是 ...

  9. CRM需要注意的一些事,修改字段类型

    crm字段类型如果变了,比如文本类型变为查找类型,要新建命名跟原来不一样,千万不能删除以前的字段再建原来的一样的,那样如果导到正式系统会造成无法导入,执行sql失败, 切记切记.可以字段名后加2,或者 ...

  10. sql server 2000 对应 sql server 2005的row_number()、rank()、DENSE_RANK( )、ntile( )等用法

    转自CSDN:http://blog.csdn.net/htl258/article/details/4006717 SQL server 2005新增的几个函数,分别是row_number( ).r ...