LOJ2436
幼儿园里有 N 个小朋友, lxhgww 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。
但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, lxhgww 需要满足小朋友们的 K 个要求。
幼儿园的糖果总是有限的, lxhgww 想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。
输入的第一行是两个整数 N ,K 。
接下来 行,表示这些点需要满足的关系,每行 个数字,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 。
对于 100% 的数据,保证 N,K<1E5 。
_____________________________________________
差分约束
a==b 等价于 a>=b&&b>=a
a<b 等价于 b-a>=1
注意开LONG LONG
_____________________________________________


1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1e5+10;
4 int n,m;
5 struct edge
6 {
7 int u,v,w,nxt;
8 }e[maxn*5];
9 int head[maxn],js;
10 void addage(int u,int v,int w)
11 {
12 e[++js].u=u;e[js].v=v;e[js].w=w;
13 e[js].nxt=head[u];head[u]=js;
14 }
15 int dis[maxn],cs[maxn];
16 bool inq[maxn];
17 deque<int>q;
18
19 bool spfa(int u)
20 {
21 memset(dis,0xff,sizeof dis);
22 dis[u]=0;cs[u]++;
23 inq[u]=1;q.push_back(u);
24 while(!q.empty())
25 {
26 int u=q.front();q.pop_front();inq[u]=0;
27 for(int i=head[u];i;i=e[i].nxt)
28 {
29 int v=e[i].v,w=e[i].w;
30 if(dis[v]<dis[u]+w)
31 {
32 dis[v]=dis[u]+w;
33 if(!inq[v])
34 {
35 if(!q.empty() && dis[q.front()]<=dis[v])q.push_front(v);
36 else q.push_back(v);
37 ++cs[v];
38 if(cs[v]>n)return 0;
39 inq[v]=1;
40 }
41 }
42 }
43 }
44 return 1;
45 }
46 int main()
47 {
48 scanf("%d%d",&n,&m);
49 for(int op,a,b,i=1;i<=m;++i)
50 {
51 scanf("%d%d%d",&op,&a,&b);
52 if(op==1){addage(a,b,0);addage(b,a,0);}
53 else if(op==2)addage(a,b,1);
54 else if(op==3)addage(b,a,0);
55 else if(op==4)addage(b,a,1);
56 else addage(a,b,0);
57 }
58 for(int i=1;i<=n;++i)addage(0,i,1);
59 bool bz=spfa(0);
60 if(bz==0)
61 {
62 puts("-1");
63 return 0;
64 }
65 long long ans=0;
66 for(int i=1;i<=n;++i)ans+=dis[i];
67 cout<<ans;
68 return 0;
69 }
LOJ2436的更多相关文章
- loj2436 糖果
传送门 分析 我们知道对于一个不等式a<b可以将其转化为a+1<=b的形式,在知道这个之后我们便可以将5个关系进行差分约束了,具体的建边方式见代码.注意由于每个人都必须有糖,我们把每个人的 ...
随机推荐
- YourBatman 2020年感悟关键词:科比、裁员、管理层、活着
目录 本文提纲 ✍前言 版本约定 ✍正文 科比 裁员 如何避免被裁? 1.不要迷恋管理,一味追求"当官" 2.别以为裁员只裁一线,不裁管理层 3.即使步入管理,建议不要脱离技术 4 ...
- 图解SparkStreaming与Kafka的整合,这些细节大家要注意!
前言 老刘是一名即将找工作的研二学生,写博客一方面是复习总结大数据开发的知识点,一方面是希望帮助更多自学的小伙伴.由于老刘是自学大数据开发,肯定会存在一些不足,还希望大家能够批评指正,让我们一起进步! ...
- 神经网络中的降维和升维方法 (tensorflow & pytorch)
大名鼎鼎的UNet和我们经常看到的编解码器模型,他们的模型都是先将数据下采样,也称为特征提取,然后再将下采样后的特征恢复回原来的维度.这个特征提取的过程我们称为"下采样",这个恢复 ...
- CentOS7 普通用户绕过root登录
正常环境中我们的服务器都会使用一个普通用户跳转到root进行操作,如果root用户的密码不记得只知道普通用户密码,设备又不方便进行开关机破密码时,我们就可以用到以下方法登陆设备. pkexec : ...
- Termux键盘配置
通过编辑~/.termux/termux.properties配置 extra-keys = [\ ['ESC', 'CTRL', '&', '$', '!', '%', '<', '& ...
- fatal error C1045: 编译器限制 : 链接规范嵌套太深
前言 我相信你是遇到了同样的问题.通过搜索引擎来到这里的.为了不耽误排查问题的时间,我提前说明一下这篇文章所描述的问题范畴: 我遇到的问题和 c++ 模板相关: 如果我减少传递的参数的话,是有可能避免 ...
- springboot异常处理之404
ps: 推荐一下本人的通用后台管理项目crowd-admin 以及newbee-mall增强版,喜欢的话给个star就好 源码分析 在springboot中默认有一个异常处理器接口ErrorConto ...
- 如何实现一个简易版的 Spring - 如何实现 Constructor 注入
前言 本文是「如何实现一个简易版的 Spring」系列的第二篇,在 第一篇 介绍了如何实现一个基于 XML 的简单 Setter 注入,这篇来看看要如何去实现一个简单的 Constructor 注入功 ...
- MySQL使用SQL操作数据表的增加、修改和删除
表的修改和删除 修改 -- 修改表名称 -- ALTER TABLE 旧表名 RENAME AS 新表名 ALTER TABLE test RENAME AS test1 -- 增加表字段 -- AL ...
- 【Zabbix】配置zabbix agent向多个server发送数据
1.背景: server端: 172.16.59.197 ,172.16.59.98 agent 端: hostname:dba-test-hzj02 IP:172.16.59.98 2.方式: 配 ...