12.7 bzoj2330 [SCOI2011]糖果
来源:互联网 发布:莫宁06年总决赛数据 编辑:程序博客网 时间:2024/05/14 15:11
题目描述
幼儿园里有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。
样例输入
5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
样例输出
11
提示
【数据范围】
对于30%的数据,保证 N<=100
对于100%的数据,保证 N<=100000
对于所有的数据,保证 K<=100000,1<=X<=5,1<=A, B<=N
来源
Day1
题解:差分约束系统
模板题,网上搜一搜会有很详细的讲解
#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <memory.h>#include <math.h>#include <queue>#include <stack>#include <map>#include <vector>#include <limits.h>#include <malloc.h>#include <ctype.h>#include <float.h>using namespace std;int i,x,a,b,cnt,n,k;int vis[100005];int d[100005];int p[100005];struct node{ int v,w,next;} e[2000005];int head[100005];void add(int u,int v,int w){ cnt++; e[cnt].v=v; e[cnt].w=w; e[cnt].next=head[u]; head[u]=cnt;}int spfa(){ queue <int> q; int x; int flag=2*n; for(i=1;i<=n;i++) d[i]=0; vis[0]=1; d[0]=0; q.push(0); while(!q.empty()){ x=q.front(); q.pop(); for(i=head[x];i!=-1;i=e[i].next){ if(d[x]+e[i].w>d[e[i].v]){ d[e[i].v]=d[x]+e[i].w; p[e[i].v]++; if(p[e[i].v]>=n){ //puts("-1"); return 1; } if(!vis[e[i].v]){ vis[e[i].v]=1; q.push(e[i].v); } } } vis[x]=0; } long long ans=0; for(i=1;i<=n;i++) ans+=d[i]; printf("%lld\n",ans); return 0;}int main(){ scanf("%d %d",&n,&k); for(i=0;i<=n;i++) head[i]=-1; for(i=n;i>=1;i--) add(0,i,1); for(i=1;i<=k;i++){ scanf("%d %d %d",&x,&a,&b); switch(x){ case 1:add(a,b,0);add(b,a,0);break; case 2:if(a==b){puts("-1");return 0;}add(a,b,1);break; case 3:if(a!=b) add(b,a,0);break; case 4:if(a==b){puts("-1");return 0;}add(b,a,1);break; case 5:if(a!=b) add(a,b,0);break; } } if(spfa()) puts("-1"); return 0;}
0 0
- 12.7 bzoj2330 [SCOI2011]糖果
- bzoj2330 [SCOI2011]糖果题解
- [BZOJ2330][SCOI2011]糖果
- [BZOJ2330][SCOI2011]糖果
- bzoj2330 [SCOI2011]糖果
- bzoj2330【SCOI2011】糖果
- [题解]bzoj2330(SCOI2011)糖果
- 【bzoj2330】[SCOI2011]糖果
- bzoj2330: [SCOI2011]糖果
- 【bzoj2330】[SCOI2011]糖果
- bzoj2330[SCOI2011]糖果
- bzoj2330 [SCOI2011]糖果
- 【bzoj2330】【P3275 】【SCOI2011】糖果
- bzoj2330: [SCOI2011]糖果
- BZOJ2330: [SCOI2011]糖果
- [SCOI2011]糖果 bzoj2330 洛谷 P3275
- bzoj2330 [SCOI2011]糖果 差分约束
- 【差分约束】[SCOI2011] bzoj2330 糖果
- JSON工具类
- LoadingController
- 修改PHP 上传文件大小限制
- 查看SELinux状态&关闭SELinux
- iOS中关于苹果审核IPv6的问题
- 12.7 bzoj2330 [SCOI2011]糖果
- 【Unity5.x Shdaers】ShaderLab: Blending 混合
- yolov1在ubuntu环境下的安装配置
- 点击按钮弹出表单对话框带透明遮罩
- Yii2.0-advanced-10—数据库操作2(查询构建器)
- 3、MyEclipse中hadoop环境配置
- linux 配置多个Tomcat
- Android studio设置自动导包及自动导包快捷键
- VPN篇(5.2)-04. IPsec VPN 点到点 (固定-拨号) ❀ 飞塔 (Fortinet) 防火墙