其实差分约束自己也看过了,看来做题和学算法是两码事(其实就是没系统学过

借此来看一看差分约束吧

首先要确定你要跑的是最短路还是最大路:

如果题目要求是至少、最小值,就跑最长路,相应的不等号也应该是a-b<=,b向a建;

如果题目要求是最多、最大值,就跑最短路,相应的不等号也应该是a-b>=,a向b建;

证:

若跑的是最短路,则有任一点 b,所有的a到原点的距离 +a 到b的距离<=b到原点的距离

若不等式为a-b>=5;

则可化为b<=a-5;

所以a向b连权值为 -5的边。

另:最好不要另建立原点,不然长链会T飞、

码(这题竟然卡int):

#include<iostream>
#include<cstdio>
using namespace std;
#include<queue>
#include<cstring>
#define N 400005
#define M 1000006
queue<int>q;
long long ans;
int tot,s,zhong[M],xia[N],hou[M],zhi[M],i,dis[N],n,m,sum[N],k,x,a,b;
bool vis[N];
void jian(int x,int y,int z)
{zhong[++tot]=y,hou[tot]=xia[x],xia[x]=tot,zhi[tot]=z;
}bool spfa()
{for(i=1;i<=n;i++)q.push(i),vis[i]=dis[i]=sum[i]=1;//cout<<"pp";while(!q.empty()){   int st=q.front();q.pop();// cout<<st<<" ";vis[st]=0;for(i=xia[st];i!=-1;i=hou[i]){int nd=zhong[i];if(dis[nd]<dis[st]+zhi[i]){dis[nd]=dis[st]+zhi[i];++sum[nd];       if(sum[nd]>n)return 0;if(!vis[nd]){vis[nd]=1;q.push(nd);}}      }   }return 1;
}int main()
{memset(xia,-1,sizeof(xia));scanf("%d%d",&n,&k);for(i=1;i<=k;i++){scanf("%d%d%d",&x,&a,&b);if(x==1){jian(a,b,0);jian(b,a,0);}if(x==2){if(a==b){puts("-1");return 0;}jian(a,b,1);}if(x==3){  jian(b,a,0);}if(x==4){if(a==b){puts("-1");return 0;}jian(b,a,1);}if(x==5){jian(a,b,0);}}if(!spfa()){puts("-1");return 0;}for(i=1;i<=n;i++){ans+=(long long)dis[i];  }cout<<ans;}

2017.3.18 糖果 思考记录相关推荐

  1. 2017.9.5 组合数学 思考记录

    这题风格很正统.所以我感觉如果自己能不靠题解把这个题做出来,那应该就学得不错了.. 于是在历尽千辛万苦之后,终于1A了.(事后证明 结论题的结论强行无视 乱搞也是有可能AC的) xym&ISA ...

  2. 2017.9.4 Nim 思考记录

    只要知道nim的结论   这题就是链剖板子题.1A 注意bzoj 的  换行符是     \r!!      \r!!      \r!! 就说一下链剖的易错点吧: 1.记录父节点.sz.深度 2.当 ...

  3. 2017.10.28 排序 思考记录

    这个题有一种套路,就是大小关系转化成01串,这样就变成了二分检验问题,, 就是把排序变成区间修改,然后单点查询.. 把所有比他小的赋成0,比他大的赋成1 然后判断要求位是0还是1来判断答案与当前值的大 ...

  4. 2017.10.28 压缩 思考记录

    这个题首先要知道M和R不是栈的搭配,是贪心的搭配,,就是向左找到第一个M.. 如 abababab cdcdcdcd abababab cdcdcdcd   = abRRcdcdcdcdR != Ma ...

  5. 2017.10.6 单词 思考记录

    少有的会做的ac自动机题 .这个题是匹配模式串. 所以就不需要匹配的过程,只需要建出fail树,然后直接拓扑 由于每次加进去一个单词,这个单词的每一个字母都有可能作为最后一个字母影响他的失配,所以词路 ...

  6. 2017.10.5 高速公路 思考记录

    ..一开始死活不知道样例8/3是怎么算出来的.. 后来才发现右端点要-1.. 这个题说是期望,但因为每个点的概率相同,所以直接求和然后除就可以了 维护每个区间的答案,听说直接维护答案很难写,,感觉还可 ...

  7. 2017.10.1 蚯蚓 思考记录

    现在看来这个题真心不难. 如果能保证一个从大到小的顺序的话,对所有的数依次进行相同比例的分裂操作,左右两边一定也是单调的 由于每次要+q,等价于取出元素-q,这在式子里是不影响大小关系的 所以就sor ...

  8. 2017.9.28 产品加工 思考记录

    很早之前做的了.发现bzoj上竟然没提交过 于是又重推了一遍 首先这个ti<=5是用来让n^2的复杂度降一降的, 然后就考虑装每个物品之后各个机器的耗时,同时,对于一个A机器的耗时,可能会有多个 ...

  9. 2017.9.28 降雨量 思考记录

    论逻辑清晰的重要性. 首先大小的关系明摆着是要你建一颗线段树 然后就可以分类讨论了 x没有 y有 x有 y没有 x没有 y没有 x有 y有 对于都没有的情况  只可能是maybe 对于一个没有的情况, ...

最新文章

  1. 平凡的世界,有感而发
  2. python之闭包的实现
  3. 【原创】C#中的抽象类(abstract class)和接口(interface)的比较
  4. linux定时任务的用法详解
  5. C语言细节之四: 空指针
  6. mysql如何通过数据库修改root_MySQL数据库之MySQL——修改root密码的4种方法(以windows为例)...
  7. [通信] ITU-T G.729 8kb/s CS—ACELP简介
  8. 小米推送,华为推送,个推,阿里云推送集成(服务端JAVA开发)
  9. 固态硬盘SSD格式化后,数据恢复的可能性有多大?
  10. 一键生成AppIcon 多有尺寸图标
  11. keras中的后端backend及其相关函数(K.prod,K.cast)
  12. vscode没有应用程序与此操作的指定文件有关联
  13. 【详细】TMS软件十大品牌推荐!
  14. keras.models导入Sequential错误
  15. Google word/sheets 常见的使用:
  16. 信号处理--常用术语
  17. 查看获取MD5和SHA1值(应用签名)*
  18. 量化:纸上得来终觉浅,绝知此事要躬行。
  19. BIOS与POST自检
  20. 百度地图 polygon点击事件_中国地图的画法

热门文章

  1. ParaView绘制gprMax正演模拟的波场快照方法(1)
  2. Latex中文字超过文本宽度时解决方法
  3. day6 java成员变量与局部变量以及对象的建立
  4. 孙长凯sunck_傅里叶变换红外光谱分析NMDA受体单克隆抗体抗-中国科技论文在线.PDF...
  5. python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例
  6. c#读取solidworks文件_C#初学者教程系列20:Stream流读写
  7. Python的类和对象
  8. win7鼠标指针主题包_Windows10系统用键盘来代替鼠标操作的方法
  9. java日期格式化代码的写法_Java中的`DateTimeFormatter`格式化代码中的`uuuu`与`yyyy`?...
  10. order by 子查询_SQL查询语法