传送门1
传送门2
传送门3
写在前面:tyvj打卡的不归路and第一次写差分约束,比较生疏……
思路:
1.看到题目给出了元素之间的大小关系,我们比较容易想到了差分约束,而且求的是最少糖果数,所以可以转换成各点到源点最长路径的和(我这里蛋疼了好久,一开始用的是最短路径+奇奇怪怪的方法,只过了70)
2.接下来就是建图了
点与点
①x=y就是不等式组{x-y>=0,y-x>=0},所以我们在x,y中互相连两条长度为0的边即可
②x<y可以转化成y-x>=1,所以连一条x到y的长度为1的边
③x>=y可以转化成x-y>=0,所以连一条y到x的长度为0的边
④x>y可以转化成x-y>=1,所以连一条y到x的长度为1的边
⑤y>=x可以转化成y-x>=0,所以连一条x到y的长度为0的边
关于源点
由于每个人都要分到糖(即最长距离大于0),所以从源点向所有点连一条距离为1的边
3.建图完毕即可跑SPFA求最长路径,与求最短路径类似,只不过dis值不用改,0就行
注意:
1.从源点向外连边时从n到1反着建,不然会莫名T一组
2.操作2,4时判断x,y是否相等,相等即无解,理由同上
3.SPFA中开一个num数组记录每个点进入队列的次数,>=n即是存在负环(别想着用什么√n优化),退出

推荐两篇不错的差分约束入门文章:
http://www.cnblogs.com/void/archive/2011/08/26/2153928.html
http://blog.csdn.net/xuezhongfenfei/article/details/8685313

#include<bits/stdc++.h>
#define LL long long
using namespace std;
int tot,n,m,opr,x,y,start;
int first[100010],num[100010];
LL dis[100010],ans,minn;
bool flag[100010];
queue<int> q;
struct os
{int fa,son,next,v;
}a[500010];
int in()
{int f=1,t=0;char ch=getchar();while (ch>'9'||ch<'0'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9') t=t*10+ch-'0',ch=getchar();return f*t;
}
void add(int x,int y,int z)
{a[++tot].fa=x;a[tot].son=y;a[tot].v=z;a[tot].next=first[x];first[x]=tot;
}
main()
{n=in();m=in();for (int i=1;i<=m;i++){opr=in();x=in();y=in();if (opr==1)add(x,y,0),add(y,x,0);else if (opr==2){if (x==y) printf("-1"),exit(0);add(x,y,1);}else if (opr==3)add(y,x,0);else if (opr==4){if (x==y) printf("-1"),exit(0);add(y,x,1);}elseadd(x,y,0);}start=n+1;for (int i=n;i>=1;i--) add(start,i,1);num[start]=flag[start]=1;q.push(start);while (!q.empty()){int k=q.front();flag[k]=0;q.pop();for (int i=first[k];i;i=a[i].next)if (dis[a[i].son]<dis[k]+a[i].v){dis[a[i].son]=dis[k]+a[i].v;if (!flag[a[i].son]){flag[a[i].son]=1; num[a[i].son]++;if (num[a[i].son]>=n) printf("-1"),exit(0);q.push(a[i].son);}}}   for (int i=1;i<=n;i++) ans+=dis[i];printf("%lld",ans);
}

【BZOJ2330】【tyvj1785】【codevs2404】糖果,第一次的差分约束相关推荐

  1. 差分约束 【bzoj2330】[SCOI2011]糖果

    /*[bzoj2330][SCOI2011]糖果 2014年3月5日1,2761 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖 ...

  2. AcWing 4247. 糖果(差分约束最短路)

    题目连接 https://www.acwing.com/problem/content/4250/ http://poj.org/problem?id=3159 思路 假设第i个同学得到的糖果数量为a ...

  3. 1169 糖果(差分约束)

    1. 问题描述: 幼儿园里有 N 个小朋友,老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...

  4. 算法提高课-图论-差分约束- AcWing 1169. 糖果:spfa求单源最短路、差分约束

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析: 差分约束系统 差分约束系统是一种特殊的N元一次不等式组.它包含N个变量X1,...,XnX_1,...,X_nX1​,...,Xn​ ...

  5. P3275-[SCOI2011]糖果【差分约束,负环】

    正题 题目大意:https://www.luogu.org/problemnew/show/P3275 题目大意 对于nnn个值,给出一系列不等式.求每个值的最小正整数. 解题思路 差分约束 code ...

  6. POJ 3159[差分约束]

    题目链接:[http://poj.org/problem?id=3159] 题意:有N个小朋友,编号为1-N,每个小朋友将分的一些糖果,给出一些关系A.B.C .表示B最多比A多C个,然后问你盆友1和 ...

  7. CSP认证201809-4 再卖菜[C++题解]:差分约束、前缀和

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于a0,a1,...,ana_0, a_1,...,a_na0​,a1​,...,an​,经过计算相邻的数的平均值得到b0,b1, ...

  8. pku 3159 Candies 差分约束

    题意是:fy作为班长,分发糖果给每个孩子,而分发的过程要满足一个约束条件就是 B -  A <= C 表示B所得到的糖果不能比A多c个.问fy(n点代表)所能得到的糖果数量与sp(0点代表)所能 ...

  9. POJ 3159 Candies(差分约束+SPAF)

    题意: 给n个小朋友分发糖果,但小朋友们之间有嫉妒心.接下来m行,每行三个数,分别表示小朋友A希望B得到的糖果不能比他多x个.要求你计算在满足所有小朋友的条件的情况下最多需要准备多少颗糖. 题目: D ...

最新文章

  1. libev源码解析——监视器(watcher)结构和组织形式
  2. cocos2d-x 3.0游戏实例学习笔记 《跑酷》 第五步--button控制主角Jumpamp;Crouch
  3. 『SHELL』--SHELL脚本执行方式(转)
  4. opencv图像处理总结
  5. Delphi 2010 新增功能之: 软键盘、触摸键盘(TTouchKeyboard)
  6. beta阶段第二次scrum meeting
  7. centos php mysql 5.6 安装_centos 6.8 yum安装 PHP 5.6
  8. remote addr 取到内网ip_内网穿透工具frp
  9. 去腾讯等BAT面试完的Mysql面试55题总结,含答案大赠送!
  10. git 查看修改明细_Git(查看修改记录)
  11. 周育如的音标口诀大全_英语音标记忆口诀_超实用
  12. 实现数据库版的图书管理系统
  13. 龟兔赛跑Description乌龟与兔子在马路上赛跑,马路边可以随地进行休息。
  14. 深度测评 | 五大主流多端开发框架全面对比
  15. ARPG游戏中怪物AI实现
  16. 关于拉流端ts时间切片问题导致的直播黑屏问题
  17. Python里最好用的counter计数器,不接受反驳!
  18. 电脑端微信可以打开微信小程序了
  19. Hive视图与物化视图
  20. linux重启搜狗输入法命令

热门文章

  1. 将Android手机打造成你的Python开发者桌面#华为云·寻找黑马程序员#
  2. 如何避免DevOps变革的六大“焦油坑”
  3. 一道经典极限题的分析与求解
  4. 从零开始学Pytorch(十)之循环神经网络基础
  5. PreScan轨迹mat文件数据格式
  6. python中byte2array报错_python – 使用ByteArrays解压缩Zlib字符串
  7. CSS的七种基本选择器及其权值
  8. 微服务 java9模块化_Java9系列第8篇-Module模块化编程
  9. 事务没提交的数据查的出来吗?_品牛栏山,论分布式事务
  10. python适用于哪些芯片_用pyusb在Python中开发CY7C68013,利用,PyUSB,进行,芯片,的,上位,机...