题目描述

幼儿园里有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。

很显然的一个差分约束模型。

X=1时让num[i]==num[j],只需要转换成num[i]-num[j]>=0和num[j]-num[i]>=0两个式子即可,其他情况应该不用说了,裸的差分约束模板。

最后不要忘了把所有节点向0节点连一条长度为1的边。

-1有两种情况,一是图中出现环,二是X=2或4时a!=b,特判一下就行。

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#define maxn 100010
#define maxm 500010
using namespace std;
int head[maxn],dis[maxn],n,m,p,cnt,tot[maxn];
bool inq[maxn],flag=true;
struct edge
{int next;int to;int val;
}e[maxm];
void insert(int u,int v,int w)
{e[++cnt].next=head[u];head[u]=cnt;e[cnt].to=v;e[cnt].val=w;
}
queue<int> q;
void spfa(int s)
{memset(dis,-0x3f,sizeof(dis));memset(inq,false,sizeof(inq));dis[s]=0;inq[s]=true;q.push(s);while(!q.empty()){int now=q.front();q.pop();inq[now]=false;if(tot[now]==n-1){flag=false;break;} tot[now]++;for(int i=head[now];i;i=e[i].next){int v=e[i].to;if(dis[v]<dis[now]+e[i].val){dis[v]=dis[now]+e[i].val;if(!inq[v]){q.push(v);inq[v]=true;}}}}
}
int main()
{//freopen("candy4.in","r",stdin);int k;long long ans=0;cin>>n>>k;for(int i=1;i<=k;i++){int x,a,b;scanf("%d%d%d",&x,&a,&b);if(x==1){insert(a,b,0);insert(b,a,0);}if(x==2){if(a==b) flag=false;insert(a,b,1);} if(x==3) insert(b,a,0);if(x==4){if(a==b) flag=false;insert(b,a,1);} if(x==5) insert(a,b,0);}for(int i=n;i>=1;i--) insert(0,i,1);if(flag) spfa(0);for(int i=1;i<=n;i++) ans+=dis[i];//cout<<dis[i]<<endl;if(flag) cout<<ans;else cout<<"-1";return 0;
}

BZOJ2330【SCOI2011】糖果相关推荐

  1. BZOJ2330 SCOI2011糖果

    复习了一波差分约束. http://blog.csdn.net/my_sunshine26/article/details/72849441 构图方式记住就好. 本题要倒序插入否则会被卡. 1 #in ...

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

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

  3. bzoj 2330: [SCOI2011]糖果

    2330: [SCOI2011]糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要 ...

  4. SPFA差分约束(bzoj 2330: [SCOI2011]糖果)

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 6355  Solved: 2096 [Submit][Stat ...

  5. 【差分约束】SCOI2011糖果

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

  6. 【bzoj2330】 [SCOI2011]糖果

    此题考察差分约束系统,用SPFA求最长路. 构图,边的权值只为0(等于 大于等于 小于等于)或1(大于 小于),dist数组存最长距离,即该小朋友的最少糖果数. 一次SPFA之后,直接输出dis数组总 ...

  7. 洛谷P3275 [SCOI2011]糖果

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

  8. 【BZOJ 2330】 [SCOI2011]糖果【差分约束】

    题目跳转: http://www.lydsy.com/JudgeOnline/problem.php?id=2330 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...

  9. P3275 [SCOI2011]糖果

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

  10. 题解 P3275 【[SCOI2011]糖果】

    清深夏令营机考压轴题,对差分约束的认识还是不够深刻,算法写出来了图没建对,/(ㄒoㄒ)/~~ #define inf 0x3f3f3f3f #define ll long long #define v ...

最新文章

  1. 如何使用python批量下载-使用 Python + Selenium 批量下载素材
  2. 手机PIN锁死让输入PUK解决方案
  3. 【视频】vue指令之v-for
  4. Spring 如何读取properties文件内容
  5. 北京大学数字视频编解码技术国家工程实验室开源AVS2高清实时编码器
  6. [数据结构]链表中销毁和清空的区别
  7. Collections 工具类常见方法
  8. 支撑4.5亿活跃用户的WhatsApp架构概览
  9. 史上最贵域名诞生!360斥资1700万美元买360.com
  10. java using的用法_using的几种用法 C#
  11. 有大招儿?请收下这份关于数据与智能的晋级攻略!
  12. DVWA系列之23 medium级别上传漏洞分析与利用
  13. JSP的自定义标签(一)
  14. poj 1511 Invitation Cards spfa比基础题难一些!!练练手挺好
  15. 高清成主流 十大最受用户关注摄像头
  16. 专业计算机怎么关机,Win10如何使用快捷键来关机?_win10专业版技巧
  17. 【C语言】从字符串中提取IP地址最简洁的方法
  18. StarUml----逆向工程操作步骤
  19. EXCEL 2016常用知识--Excel数据透视表
  20. 【微信小程序】微信小程序开发学习记录

热门文章

  1. windows服务器连接教程-手机连接电脑连接
  2. 前端vue经典面试题78道(重点详细简洁)
  3. vue插槽面试题_vue面试题总结
  4. 电商运营小白,如何快速入门学习数据分析?
  5. 黑苹果10.12.2驱动R9 270显卡成功一例
  6. 弘辽科技:直通车总集篇(下篇)
  7. c语言的0xF9为什么表示1,0xc0(0xc0为什么表示0)
  8. qtcpsocket断开_Qt QTcpSocket 对连接服务器中断的不同情况进行判定
  9. 微信小程序自定义弹窗,禁止page页面滚动。
  10. 串行通信:常见的串行通信接口协议UART、SPI、I2C简介