P4878 [USACO05DEC] 布局
这居然是个紫题???原谅我觉得这题是模板。。。
这个这个,这题的算法呢其实是一个叫差分约束的东西,也是今天下午我们机房的重点,如果不知道这个差分约束是个啥的人呢,自行百度一下谢谢。。
好吧还是简单介绍一下,简而言之,就是对一堆子不等式进行最短路模型化,然后依照问题用最短(长)路跑一(两)遍,基本上就可以求出答案
那么剩下的东西呢都在代码里了
// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std; int n,l,d,tot;
bool ok;
int dis[],c[],head[],next[],w[],to[];
bool vis[];
queue < int > q; void add(int v,int u,int p){//链式前向星不用多介绍了吧(这玩意要是不会的真的建议理解一下,平时做题复制粘贴虽然可以,但考场不行啊)
next[++tot]=head[v];
to[tot]=u;
w[tot]=p;
head[v]=tot;
} void spfa(int s){//由于可能有环及负权边,故用spfa求解
memset(dis,0x3f,sizeof(dis));
dis[s]=;
memset(c,,sizeof(c));
memset(vis,,sizeof(vis));
while(!q.empty()){q.pop();}
q.push(s);
vis[s]=;
ok=;
while(!q.empty()){
int x;
x=q.front();
q.pop();
vis[x]=;
for(int k=head[x];k;k=next[k]){
int y=to[k];
if(dis[x]+w[k]<dis[y]){
dis[y]=dis[x]+w[k];
if(!vis[y]){
vis[y]=;
c[y]++;
q.push(y);
}
if(c[y]>n){//处理负环的情况
ok=;
return;
}
}
}
}
return;
} int main(){
scanf("%d%d%d",&n,&l,&d);
for(int i=;i<=n;i++){//这段赋值可以对建图进行预处理,进而处理图非连通的情况
add(,i,);
}
for(int i=;i<=l;i++){//这个读入和下一个读入就是差分约束的核心,简而言之,就是小于等于时建一条a指向b权值为c的边(换行嘤嘤嘤)
int a,b,c;//大于等于时建一条b指向a权值为-c的边
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
for(int i=;i<=d;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(b,a,-c);
}
spfa();
if(!ok){//负环
printf("-1\n");
return ;
}
spfa();
if(!ok){//负环
printf("-1\n");
}
else if(dis[n]==0x3f3f3f3f){//不连通
printf("-2\n");
}
else{
printf("%d\n",dis[n]);//输出
}
return ;
}
嗯呐还有好多篇要写,就这样了
P4878 [USACO05DEC] 布局的更多相关文章
- 差分约束算法————洛谷P4878 [USACO05DEC] 布局
题目: 不难看出题意主要是给出ml+md个格式为xi-xj<=ak的不等式,xi-xj为i,j俩头牛的距离,要我们求x1-xn的最大值. 经过上下加减我们可以将这几个不等式化成x1-xn< ...
- Luogu P4878 [USACO05DEC]布局
题目 差分约束模板. 注意判负环需要建一个超级源点到每个点连一条\(0\)的边.因为\(1\)不一定能到达所有的点. #include<bits/stdc++.h> #define pi ...
- P4878 [USACO05DEC]layout布局
P4878 [USACO05DEC]layout布局 差分约束 最短路径最长路,最长路径最短路 本题求的是最长路径,所以跑最短路 根据题意连边,然后spfa即可 注意要判断图的连通性,所以新建一个虚拟 ...
- 洛谷 P4878 [USACO05DEC]layout布局
题面链接 sol:差分约束系统裸题,根据a+b<=c建个图跑个最短路就没了... #include <queue> #include <cstdio> #include ...
- 洛谷P4878 [USACO05DEC]layout布局
题目描述 正如其他物种一样,奶牛们也喜欢在排队打饭时与它们的朋友挨在一起.\(FJ\) 有编号为 \(1\dots N\) 的 \(N\) 头奶牛 \((2\le N\le 1000)\).开始时,奶 ...
- 【洛谷P4878】布局
题目大意:给定一个长度为 N 的递增序列,有 M 组差分约束关系,求满足这些约束关系时,第一个数和第 N 个数的差是多少. 题解:首先,能否满足约束关系需要判断一下负环,若满足约束关系,再从第一个点 ...
- 洛谷 [USACO05DEC] 布局 题解
今天学了差分约束系统, 这是一道板子题. 核心:a[v]>a[u]+d 相当于从u到v连一条长度为d的有向边.由于要判断有环,所以要从0点先跑一遍spfa因为1点不一定能到所有的点. #incl ...
- (精)题解 guP4878 [USACO05DEC] 布局
差分约束模版题 不过后三个点简直是满满的恶意qwq 这里不说做题思路(毕竟纯模板),只说几个坑点: 1. 相邻的两头牛间必须建边(这点好像luogu没有体现),例如一组数据: 4 1 1 1 4 10 ...
- 2018年12月30&31日
小结:昨天由于做的题目比较少,所以就和今天写在一块了,昨天学习了差分约束和树上差分,当然树上差分是用线段树来维护的,今天重点整理了博客\(233\),然后做了几个题. 一. 完成的题目: 洛谷P327 ...
随机推荐
- java获取音频文件播放时长
方法一: 在项目开发过程中,需要获取音视频文件时长.查询资料后发现 JAVE能够完美得到想要的结果,JAVE项目简介如下: The JAVE (Java Audio Video Encoder) li ...
- HDU6740 2019CCPC秦皇岛赛区 J. MUV LUV EXTRA
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6740思路:求小数部分后k位的真前后缀 倒着kmp就好 #include<bits/stdc++.h& ...
- Codeforces Round #395 Div.1 C pacifist【JZOJ5449】Pacifist
题目 papyrus 喜欢谜题... 来解一道如何? 在你面前有一个被加密了的数组,其原数组是一个等差序列,你面前的则是将原数组中的所有数字都对m 取模再打乱后而得到的新数组 papyrus 给你出的 ...
- java设置Cookie
public static void setCookie(HttpServletResponse response, String key, String value){ Cookie cookie ...
- JavaScript 正则表达式——对象,修饰符,元字符,字符类,范围类
㈠RegExp 对象 ⑴JavaScript通过内置对象RegExp支持正则表达式 ⑵有两种方法实例化RegExp对象 ①字面量 ②构造函数 ⑶字面量示例 示例1: 你会发 ...
- CF1101D GCD Counting 点分治+质因数分解
题意:求最长的树上路径点值的 $gcd$ 不为 $1$ 的长度. 由于只要求 $gcd$ 不为一,所以只要 $gcd$ 是一个大于等于 $2$ 的质数的倍数就可以了. 而我们发现 $2\times 1 ...
- android 支持发送空短信
method:A) AP端修改:1.将ComposeMessageActivity.java 中的 isPreparedForSending() 作如下修改(删掉的code也可以注释掉)private ...
- 18.Python格式化字符串(格式化输出)
Python 提供了“%”对各种类型的数据进行格式化输出,例如如下代码: price = 108 print ("the book's price is %s" % price) ...
- 9.Python关键字(保留字)一览表
保留字是 Python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量.函数.类.模板以及其他对象命名. Python 包含的保留字可以执行如下命令进 ...
- Vue一个案例引发的动态组件与全局事件绑定总结
最近在自学 Vue 也了解了一些基本用法,也记录了一些笔记有兴趣的朋友可以去查看我的其他文章,技术这东西真的不能光靠看,看是没有的,你必须要动手实践,只有在实战项目中才能发现问题,才能发现我们没有掌握 ...