洛谷P3275 [SCOI2011]糖果
题目描述
幼儿园里有\(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]糖果相关推荐
- YBTOJ洛谷P4074:糖果公园(树上莫队)
文章目录 解析 update: 代码 所谓树上莫队,就是在树上的莫队 (逃) 传送门 解析 似乎就是树上的这道题 考虑如何转化为序列问题呢? 考虑dfs序 但是又一个问题... 似乎这条链的dfs序不 ...
- 洛谷P3273 [SCOI2011] 棘手的操作 [左偏树]
题目传送门 棘手的操作 题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条边,连接第x个节点和第y个节点 A1 ...
- P3275 [SCOI2011]糖果
emmmm博客补不完喽~~~(其实这是题目链接,但..也确实是事实..) 这题呢,也基本上就是差分约束的模板题了(要是不知道差分约束的话自行百度一下喽~~),实际上这类题目吧,撇开读入,基本都一样,就 ...
- 【差分约束】SCOI2011糖果
P3275 [SCOI2011]糖果 快noip了我还在干什么啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 来我们看这道题 根据条件建图, 因为求得是最小值, 所以要跑最长路qwq(这是我记住的QAQ ...
- 洛谷刷题C语言:潇湘の雨、分糖果、Addition、Ljeto、TRI
记录洛谷刷题C语言QAQ 「PMOI-0」潇湘の雨 题目背景 (原 LZOI-1,改名已经 PMOI 成员同意) lhm-01 题目描述 言琢დ 在一个 2n×2n2n \times 2n2n×2n ...
- 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- 【蓝桥杯专题】 贪心(C++ | 洛谷 | acwing | 蓝桥)
菜狗现在才开始备战蓝桥杯QAQ 文章目录 [蓝桥杯专题] (C++ | 洛谷 | acwing | 蓝桥) 1055. 股票买卖 II AcWing 104. 货仓选址 传递糖果 AcWing 112 ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 树上差分
缘起 [1]中我们学习了树上差分,并且a了一个裸的点差分. 现在继续树上差分~ 洛谷 P3258 [JLOI2014]松鼠的新家 分析 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房 ...
- 洛谷or牛客数据结构+算法
栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...
最新文章
- share_ptr_c++11
- 快要普通话考试了,急需最后一题的根据话题自由讲话的演讲稿!(不要那些已经被用过...
- opencv grabcut
- java匿名内部类举例和内部类举例
- 【NLP】Transformers 源码阅读和实践
- 03_设置轴标签和范围、轴的标签(Labels on Axes)、定义轴的范围、使用linspace定义X值 (“linspace“ to Define X Values)
- php 累,php 记录进行累结果
- silverlight中如何将string(字符串)写入Resource(资源)?
- php如何写log日志,用php生成log日志
- 微软移除Visual Studio 2015中的UML
- 【版本发布】JEECG 3.6.2 移动能力版发布,快速开发平台
- ConfigMap用管理对象的方式管理配置
- ibatis This SQL map does not contain a MappedStatement
- ubuntu15.10 gvim php,IDE---Gvim之ubuntu下配置php的ide开发工具
- Git之同一台电脑连接多个远程仓库
- Java学习之「Spring + AspectJ 」
- checkbox全选
- oracle分析函数详解
- 利用java的jsoup实现:短视频无水印下载
- haswell主板linux驱动下载,Intel首版Haswell核芯显卡驱动下载
热门文章
- 河南理工大学计算机专业几本,2018河南理工大学是几本 是一本还是二本
- python生成器表达式_python 生成器和生成器表达式
- springboot+vue全栈开发_springboot+vue(一)___开发环境以及前后端项目搭建
- jsf教程_JSF教程
- java 字符串池_什么是Java字符串池?
- svn关键字替换_SVN关键字替换示例
- lshw linux_Linux lshw命令–获取Linux硬件信息
- Android Studio 3.3功能
- C++还有前景吗?做服务器这一块可以吗?
- 开课吧课堂:Java的内置异常汇总列表!