题目描述

幼儿园里有\(N\)个小朋友,\(lxhgww\)老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,\(lxhgww\)需要满足小朋友们的\(K\)个要求。幼儿园的糖果总是有限的,\(lxhgww\)想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。

输入输出格式

输入格式:

输入的第一行是两个整数\(N\),\(K\)。接下来K行,表示这些点需要满足的关系,每行\(3\)个数字,\(X\),\(A\),\(B\)。如果\(X=1\), 表示第\(A\)个小朋友分到的糖果必须和第\(B\)个小朋友分到的糖果一样多;如果\(X=2\), 表示第\(A\)个小朋友分到的糖果必须少于第\(B\)个小朋友分到的糖果;如果\(X=3\), 表示第\(A\)个小朋友分到的糖果必须不少于第\(B\)个小朋友分到的糖果;如果\(X=4\), 表示第\(A\)个小朋友分到的糖果必须多于第\(B\)个小朋友分到的糖果;如果\(X=5\), 表示第\(A\)个小朋友分到的糖果必须不多于第\(B\)个小朋友分到的糖果;

输出格式:

输出一行,表示\(lxhgww\)老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出\(-1\)。

输入输出样例

输入样例#1:

5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1

输出样例#1:

11

说明

【数据范围】

对于\(30\%\)的数据,保证 \(N \leq 100\)

对于\(100\%\)的数据,保证 \(N \leq 100000\)

对于所有的数据,保证 \(K \leq 100000\),\(1 \leq X \leq 5\),\(1 \leq A, B \leq N\)

思路:考虑差分约束,对于给出的第一种关系,我们就建一条双向的边权为\(0\)的边,然后第二种情况,\(A\)比\(B\)小,而且要严格小于,那就相当于是\(d[B]-d[A]>=1\),然后剩余的三种就跟前两种类似了,就不必多说了,然后跑最短路的时候,我们以\(0\)为起点,向其它的点建一条权值为\(0\)的边,然后无解就是存在负环或建边的时候起点等于终点。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
#include<queue>
#define ll long long
#define maxn 100007
using namespace std;
int num,n,k,head[maxn],dis[maxn],vis[maxn],in[maxn];
ll ans;
inline int qread() {char c=getchar();int num=0,f=1;for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) num=num*10+c-'0';return num*f;
}
struct node {int v,w,nxt;
}e[300007];
inline void ct(int u, int v, int w) {e[++num].v=v;e[num].w=w;e[num].nxt=head[u];head[u]=num;
}
inline int spfa() {memset(dis,-0x3f,sizeof(dis));queue<int>q;q.push(0),dis[0]=0,vis[0]=1,in[0]=1;while(!q.empty()) {int u=q.front();q.pop();vis[u]=0;for(int i=head[u];i;i=e[i].nxt) {int v=e[i].v;if(dis[v]<dis[u]+e[i].w) {dis[v]=dis[u]+e[i].w;if(!vis[v]) {vis[v]=1;in[v]++;if(in[v]>n) return -1;q.push(v);}}}}return 0;
}
int main() {n=qread(),k=qread();for(int i=1,p,u,v;i<=k;++i) {p=qread(),u=qread(),v=qread();if(p==1) ct(u,v,0),ct(v,u,0);if(p==2) {if(u==v) {printf("-1\n");return 0;}ct(u,v,1);}if(p==3) ct(v,u,0);if(p==4) {if(u==v) {printf("-1\n");return 0;}ct(v,u,1);}if(p==5) ct(u,v,0);}for(int i=n;i>=1;--i) ct(0,i,1);if(spfa()) {printf("-1\n");return 0;}for(int i=1;i<=n;++i) ans+=dis[i];printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/grcyh/p/10201641.html

洛谷P3275 [SCOI2011]糖果相关推荐

  1. YBTOJ洛谷P4074:糖果公园(树上莫队)

    文章目录 解析 update: 代码 所谓树上莫队,就是在树上的莫队 (逃) 传送门 解析 似乎就是树上的这道题 考虑如何转化为序列问题呢? 考虑dfs序 但是又一个问题... 似乎这条链的dfs序不 ...

  2. 洛谷P3273 [SCOI2011] 棘手的操作 [左偏树]

    题目传送门 棘手的操作 题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 ...

  3. P3275 [SCOI2011]糖果

    emmmm博客补不完喽~~~(其实这是题目链接,但..也确实是事实..) 这题呢,也基本上就是差分约束的模板题了(要是不知道差分约束的话自行百度一下喽~~),实际上这类题目吧,撇开读入,基本都一样,就 ...

  4. 【差分约束】SCOI2011糖果

    P3275 [SCOI2011]糖果 快noip了我还在干什么啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 来我们看这道题 根据条件建图, 因为求得是最小值, 所以要跑最长路qwq(这是我记住的QAQ ...

  5. 洛谷刷题C语言:潇湘の雨、分糖果、Addition、Ljeto、TRI

    记录洛谷刷题C语言QAQ 「PMOI-0」潇湘の雨 题目背景 (原 LZOI-1,改名已经 PMOI 成员同意) lhm-01 题目描述 言琢დ 在一个 2n×2n2n \times 2n2n×2n ...

  6. 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm

    题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...

  7. 【蓝桥杯专题】 贪心(C++ | 洛谷 | acwing | 蓝桥)

    菜狗现在才开始备战蓝桥杯QAQ 文章目录 [蓝桥杯专题] (C++ | 洛谷 | acwing | 蓝桥) 1055. 股票买卖 II AcWing 104. 货仓选址 传递糖果 AcWing 112 ...

  8. 洛谷 P3258 [JLOI2014]松鼠的新家 树上差分

    缘起 [1]中我们学习了树上差分,并且a了一个裸的点差分. 现在继续树上差分~ 洛谷 P3258 [JLOI2014]松鼠的新家 分析 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房 ...

  9. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

最新文章

  1. share_ptr_c++11
  2. 快要普通话考试了,急需最后一题的根据话题自由讲话的演讲稿!(不要那些已经被用过...
  3. opencv grabcut
  4. java匿名内部类举例和内部类举例
  5. 【NLP】Transformers 源码阅读和实践
  6. 03_设置轴标签和范围、轴的标签(Labels on Axes)、定义轴的范围、使用linspace定义X值 (“linspace“ to Define X Values)
  7. php 累,php 记录进行累结果
  8. silverlight中如何将string(字符串)写入Resource(资源)?
  9. php如何写log日志,用php生成log日志
  10. 微软移除Visual Studio 2015中的UML
  11. 【版本发布】JEECG 3.6.2 移动能力版发布,快速开发平台
  12. ConfigMap用管理对象的方式管理配置
  13. ibatis This SQL map does not contain a MappedStatement
  14. ubuntu15.10 gvim php,IDE---Gvim之ubuntu下配置php的ide开发工具
  15. Git之同一台电脑连接多个远程仓库
  16. Java学习之「Spring + AspectJ 」
  17. checkbox全选
  18. oracle分析函数详解
  19. 利用java的jsoup实现:短视频无水印下载
  20. haswell主板linux驱动下载,Intel首版Haswell核芯显卡驱动下载

热门文章

  1. 河南理工大学计算机专业几本,2018河南理工大学是几本 是一本还是二本
  2. python生成器表达式_python 生成器和生成器表达式
  3. springboot+vue全栈开发_springboot+vue(一)___开发环境以及前后端项目搭建
  4. jsf教程_JSF教程
  5. java 字符串池_什么是Java字符串池?
  6. svn关键字替换_SVN关键字替换示例
  7. lshw linux_Linux lshw命令–获取Linux硬件信息
  8. Android Studio 3.3功能
  9. C++还有前景吗?做服务器这一块可以吗?
  10. 开课吧课堂:Java的内置异常汇总列表!