题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2330
类似于题目中这种含有不等式关系,我们可以建立差分约束系统来跑最长路或最短路。
对于一个不等式$X_1-X_2>=a$我们可以看成是$X_1>=X_2+a$,把$X_1$和$X_2$看成两个点,我们可以发现这个关系跟最长路中的$dis[v]>=dis[u]+w[i]$很像,就是最长路中的点一定满足这样的关系。
所以我们就按着这个思路,先把关于点$X_1$,$X_2$和边$a$的图建好,再来跑一遍最长路,如果有解,就一定满足题目中的不等式关系。
具体连边方式就是若有$a>=b+c$,则连$b$到$a$,边权为$c$。最短路同理。
最长路无解的情况就是存在正权环,最短路存在负权环。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
const int INF=<<;
int inline readint(){
int Num;char ch;
while((ch=getchar())<''||ch>'');Num=ch-'';
while((ch=getchar())>=''&&ch<='') Num=Num*+ch-'';
return Num;
}
int N,K;
int to[],ne[],w[],fir[],cnt=;
void Add(int a,int b,int c){
to[++cnt]=b;
w[cnt]=c;
ne[cnt]=fir[a];
fir[a]=cnt;
}
int vis[],dis[];
bool in[];
queue <int> q;
ll spfa(){
for(int i=;i<=N;i++) dis[i]=-INF;
in[N+]=true;
q.push(N+);
dis[N+]=;
vis[N+]=;
int u;
while(!q.empty()){
u=q.front();
q.pop();
in[u]=false;
for(int i=fir[u];i!=-;i=ne[i]){
int v=to[i];
if(dis[v]<dis[u]+w[i]){
dis[v]=dis[u]+w[i];
if(!in[v]){
q.push(v);
in[v]=true;
vis[v]++;
if(vis[v]>N) return -;
}
}
}
}
ll ans=;
for(int i=;i<=N;i++) ans+=dis[i];
return ans;
}
int main(){
memset(fir,-,sizeof(fir));
N=readint();
K=readint();
for(int i=;i<=K;i++){
int X=readint(),
A=readint(),
B=readint();
switch(X){
case :
Add(B,A,);
Add(A,B,);
break;
case :
if(A==B){
puts("-1");
return ;
}
Add(A,B,);
break;
case :
Add(B,A,);
break;
case :
if(A==B){
puts("-1");
return ;
}
Add(B,A,);
break;
case :
Add(A,B,);
break;
}
}
for(int i=N;i>=;i--) Add(N+,i,);
printf("%lld\n",spfa());
return ;
}
[BZOJ2330][SCOI2011]糖果 差分约束系统+最短路的更多相关文章
-
bzoj2330: [SCOI2011]糖果 差分约束系统
幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候 ...
-
【bzoj2330】[SCOI2011]糖果 差分约束系统
题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...
-
BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
-
BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA
最小值求最长路. 最大值求最短路. 发现每个约束条件可以转化为一条边,表示一个点到另外一个点至少要加上一个定值. 限定了每一个值得取值下界,然后最长路求出答案即可. 差分约束系统,感觉上更像是两个变量 ...
-
BZOJ2330:[SCOI2011]糖果(差分约束)
Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的 ...
-
洛谷P3275 [SCOI2011]糖果 [差分约束系统]
题目传送门 糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比 ...
-
BZOJ2330 SCOI2011 糖果 【差分约束】
BZOJ2330 SCOI2011 糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一 ...
-
P3275 [SCOI2011]糖果 &;&; 差分约束(二)
学习完了差分约束是否有解, 现在我们学习求解最大解和最小解 首先我们回想一下是否有解的求解过程, 不难发现最后跑出来任意两点的最短路关系即为这两元素的最短路关系. 即: 最后的最短路蕴含了所有元素之间 ...
-
bzoj2330: [SCOI2011]糖果
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...
随机推荐
-
【原】Github系列之三:开源iOS下 渐变颜色的进度条WGradientProgress
概述 今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有“B格”.它拥有渐变的颜色,而且这种颜色是动态移 ...
-
Linux的95个小技巧
Linux的95个小技巧 by WEB全栈工程师 on 2012 年 03 月 27 日 这里总结了Linux使用中的一些小技巧 1.实现RedHat非正常关机的自动磁盘修复 先登录到服务器,然后在/ ...
-
vim功能使用
转自:http://blog.csdn.net/xiajun07061225/article/details/7039413 vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就 ...
-
HttpServer的使用
http://docs.oracle.com/javase/8/docs/jre/api/net/httpserver/spec/overview-summary.html 1.Package com ...
-
百度地图API使用介绍
百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例.以下代码创建了一个520x340大小的地图区域并以*作为地图的中心: 1. <html> 2. <head& ...
-
图论:(Code Forces) Graph and String
Graph and String time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
-
Android--->;LinearLayout页面布局方式
main.xml布局方式 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns ...
-
[LeetCode] Unique Morse Code Words 独特的摩斯码单词
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
-
linux测试环境维护之磁盘空间维护
常见需要定期清理的日志有: 清理oracle监听日志: 1.进入/opt/oracle/db/diag/tnslsnr/sels-186/listener/alert目录下, 执行命令: rm -rf ...
-
乘法“*”和点乘“.*”&;除法“/”和点除“./”区别
reference:https://blog.csdn.net/xiaotao_1/article/details/79026406 一,*和.*的联系和区别. 1,在进行数值运行和数值乘矩阵,这两 ...