bzoj2330 [SCOI2011]糖果 差分约束
来源:互联网 发布:vb打开文件夹 编辑:程序博客网 时间:2024/06/03 19:03
Description
幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。
Input
输入的第一行是两个整数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个小朋友分到的糖果;
Output
输出一行,表示lxhgww老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出-1。
Sample Input
5 7
1 1 2
2 3 2
4 4 1
3 4 5
5 4 5
2 3 5
4 5 1
Sample Output
11
HINT
【数据范围】
对于30%的数据,保证 N<=100
对于100%的数据,保证 N<=100000
对于所有的数据,保证 K<=100000,1<=X<=5,1<=A, B<=N
Source
Day1
差分约束,就是把一系列不等式放在当成一个有向图来处理。比如说a-b<=1,可以看成dis[a]<=dis[b]+1。
代码:
#include<queue>#include<cstdio>#include<cstring>#include<iostream>#define ll long longusing namespace std;queue<int>q;int head[100005],tov[400005],nex[400005],vis[100005],tot,n;bool judge[100001];int dis[100001],w[400001];void add(int a,int b,int c){ tov[++tot]=b; nex[tot]=head[a]; w[tot]=c; head[a]=tot;}bool spfa(){ q.push(0); while(!q.empty()) { int k=q.front(); q.pop(); int t=head[k]; int v=tov[t]; judge[k]=false; while(v) { if(dis[v]<dis[k]+w[t]) { vis[v]++; if(vis[v]==n+1) return false; dis[v]=dis[k]+w[t]; if(!judge[v]) { q.push(v); judge[v]=true; } } t=nex[t]; v=tov[t]; } } return true;}int main(){ int k; scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) { int x,a,b; 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){printf("-1");return 0;} add(a,b,1);break; case 3:add(b,a,0);break; case 4:if(a==b){printf("-1");return 0;} add(b,a,1);break; case 5:add(a,b,0);break; } } for(int i=n;i>=1;i--) add(0,i,1); if(!spfa()) { printf("-1"); return 0; } int ans=0; for(int i=1;i<=n;i++) ans+=dis[i]; printf("%d",ans); return 0;}
- bzoj2330 [SCOI2011]糖果 差分约束
- 【差分约束】[SCOI2011] bzoj2330 糖果
- [BZOJ2330]SCOI2011糖果|差分约束
- 【bzoj2330】【scoi2011】【糖果】【差分约束】
- [BZOJ2330][SCOI2011]糖果(差分约束)
- 【BZOJ2330 SCOI2011】糖果差分约束
- BZOJ2330: [SCOI2011]糖果 差分约束+spfa
- 【BZOJ2330】 [SCOI2011]糖果 差分约束+贪心
- [BZOJ2330][SCOI2011][差分约束]糖果
- bzoj2330 [SCOI2011]糖果 差分约束
- bzoj2330 [SCOI2011]糖果 差分约束
- [BZOJ2330][SCOI2011]糖果 差分约束系统
- BZOJ2330[SCOI2011] 糖果 题解【差分约束】
- bzoj2330 SCOI2011 糖果 【差分约束】
- bzoj2330 [SCOI2011]糖果(差分约束+spfa)
- BZOJ2330(SCOI2011)[糖果]--差分约束系统
- BZOJ2330 [SCOI2011]糖果 差分约束模板
- 差分约束——BZOJ2330/Luogu3275 [SCOI2011]糖果
- java_基础_socket编程UDP--实用
- 算法——斐波那契(1)
- WEB端、H5前端性能测试
- html自定义标签
- hdu 2082--找单词 普通型母函数的应用
- bzoj2330 [SCOI2011]糖果 差分约束
- java基础_socket编程_TCP实现
- [bzoj3343]&&[洛谷2810] [分块][块内排序][二分查找]教主的魔法
- 10月-月总结
- 1057. 数零壹(20)
- More Coding In Delphi
- 初涉MySQL——操作数据库
- 第九周项目3-稀疏矩阵的三元组表示的实现及应用(2)
- 【UOJ244】【UOJ #7】短路