糖果

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 131072/131072KB (Java/Others)

Submit Status

幼儿园里有NN个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求。幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。

Input

输入的第一行是两个整数N(1≤N≤1000001≤N≤100000),K(1≤K≤1000001≤K≤100000)。

接下来KK行,表示这些点需要满足的关系,每行33个数字,X,A,B(1≤X≤51≤X≤5, 1≤A,B≤N1≤A,B≤N)。

  • 如果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 and output

Sample Input

Sample Output

5 7

1 1 2

2 3 2

4 4 1

3 4 5

5 4 5

2 3 5

4 5 1

11

 

代码

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#define ll long long
#define INF 0x3f3f3f3f
#define MAXN 200005
using namespace std; int N,M,tot;
int inq[MAXN],dis[MAXN],cur[MAXN];
vector<int> G[MAXN],c[MAXN];
queue<int> q; void add(int u,int v,int w){
G[u].push_back(v);
c[u].push_back(w);
} ll sum(){
ll tmp=;
for(int i=;i<=N;i++)
tmp+=dis[i];
return tmp;
} int spfa(){
q.push();inq[]=;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=;i<G[x].size();i++){
int to=G[x][i];
if(dis[to]<dis[x]+c[x][i]){//最长路
dis[to]=dis[x]+c[x][i];
if(++cur[to]>=N) return ;
if(!inq[to]){
q.push(to);
inq[to]=;
}
}
}
inq[x]=;
}
return ;
} int main(){
// freopen("01.in","r",stdin);
scanf("%d%d",&N,&M);
for(int i=;i<=M;i++){
int op,x,y;
scanf("%d%d%d",&op,&x,&y);
switch(op){
case :{
add(x,y,);
add(y,x,);//Orz
break;
}
case :{
if(x==y){puts("-1");return ;}//Orz
add(x,y,);
break;
}
case :{
add(y,x,);
break;
}
case :{
if(x==y){puts("-1");return ;}//Orz
add(y,x,);
break;
}
case :{
add(x,y,);
break;
}
}
}
for(int i=;i<=N;i++) add(,i,);//每个小朋友都要分到 if(!spfa()) puts("-1");
else printf("%lld\n",sum());//long long return ;
}

通过最长路来求解,值得一看

注意Line71,Line69 的判断

还有Line37写成  if(++cur[to]>=N-1) return 0;

错得无语了

CDOJ 435 (SCOI 2011) 糖果 Label:差分约束系统的更多相关文章

  1. bzoj 2330 [SCOI2011]糖果(差分约束系统)

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 3574  Solved: 1077[Submit][Status ...

  2. 【洛谷3275】[SCOI2011] 糖果(差分约束系统入门题)

    点此看题面 大致题意: 有\(N\)个小朋友,要求每个人都得到糖果,且每个人的糖果总数满足一定的关系式,请你求出至少共分给小朋友们多少糖果. 关系式的转换 首先,我们可以将题目中给定的式子进行转换: ...

  3. 【BZOJ2330】糖果(差分约束系统,强连通分量,拓扑排序)

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

  4. [SCOI 2011]糖果

    Description 题库链接 给出 \(N\) 个节点,节点有正点权, \(K\) 个三元组 \((X,A,B)\) 来描述节点点权之间的关系. 如果 \(X=1\) , 表示 \(A\) 的点权 ...

  5. BZOJ 2330 SCOI 2011 糖果

    2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...

  6. 解题:SCOI 2011 糖果

    题面 能把差分约束卡死的题,因为正解并不是差分约束,然而被我用一种奇怪的姿势过去了... 差分约束就是相等互相连零边,不超过/不低于从不多的一方向另一方连零边,超过/低于从少的一方向另一方连最小的边权 ...

  7. BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5395  Solved: 1750[Submit][Status ...

  8. bzoj2330: [SCOI2011]糖果 差分约束系统

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

  9. 【bzoj2330】[SCOI2011]糖果 差分约束系统

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

随机推荐

  1. jQuery Moblie 学习之page、button、theme、panel、listview、controlgroup、navbar等(一)

    1.jQTouch jQTouch与jQuery Moblie十分相似,也是一个jQuery插件,同样也支持HTML页面标签驱动,实现移动设备视图切换效果.不同的是它是专为WebKit内核的浏览器打造 ...

  2. 【131202】SQL

    SELECT TOP 2 * FROM Persons SELECT *FROM PersonsWHERE ROWNUM <= 5   SELECT * FROM Persons WHERE C ...

  3. Oracle锁定和解锁用户的命令

    转:http://database.51cto.com/art/200910/158576.htm 在DBA的日常工作中,经常遇到为Oracle用户解锁的操作:这篇文章给出在命令行下进行Oracle用 ...

  4. scrollTop和scrollLeft的兼容解决万全方法

    1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用  document.body.scrollTop 来获取 scrollTop高度 : 对于有do ...

  5. Tabular Model下的ADOMD.NET

    ADOMD.NET是一套对象架构体系,它包含需要向SSAS数据库做访问的一切支持的对象和方法.很多微软官方以及第三方的SSAS客户端应用都是通过这个对象来操作数据. 多维模式的ADOMD.NET在我以 ...

  6. c++ 调用dll

    1.首先写一个dll程序并且输出成dll. 新建win32项目,然后在应用程序类型中选择dll. HelloDll.h: #pragma once #ifndef MYDLL_API_EXPORTS ...

  7. supervisor使用

    supervisor是一个C/S系统,它可以在类unix操作系统让用户来监视和控制后台服务进程的数量,一个很重要的功能就是监控服务器的主要后台进程,并在出现问题是自动重启. 根据服务器上的python ...

  8. Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强

    本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1). ...

  9. 【rqnoj378】 约会计划

    题目描述 cc是个超级帅哥,口才又好,rp极高(这句话似乎降rp),又非常的幽默,所以很多mm都跟他关系不错.然而,最关键的是,cc能够很好的调解各各妹妹间的关系.mm之间的关系及其复杂,cc必须严格 ...

  10. yaml官方介绍

    官方网站 http://yaml.org/ 数据结构类型说明 http://yaml.org/type/ YAML Specification http://yaml.org/spec/