【BZOJ】1731: [Usaco2005 dec]Layout 排队布局
【题意】给定按编号顺序站成一排的牛,给定一些约束条件如两牛距离不小于或不大于某个值,求1和n的最大距离。无解输出-1,无穷解输出-2。
【算法】差分约束+最短路
【题解】图中有三个约束条件,依次分析:
①坐标顺序和编号顺序一致【一定一定要记得这个约束条件】
xi-xi-1>=0
i向-1连边0
②两牛距离不大于距离L
xj-xi<=L
i向j连边L
③两牛距离不小于距离D
xj-xi>=D即xi-xj<=-D
j向i连边-D
连边完毕,通过跑最短路得到起点和终点的直接约束xT-xS<=d,d就是1到n的最大值。
注意循环队列while(head!=tail)
检测负环可以用【点的入队次数>n】和【到点步数>n】两种方法。一起用也资瓷=w=。
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=;
int n,m,k,tot=;
int first[maxn],step[maxn],q[maxn],d[maxn];
bool vis[maxn];
struct edge{int v,w,from;}e[maxn*maxn];
void insert(int u,int v,int w){tot++;e[tot].v=v;e[tot].w=w;e[tot].from=first[u];first[u]=tot;}
bool spfa(){
memset(d,0x3f,sizeof(d));
memset(vis,,sizeof(vis));
int head=,tail=;
q[head]=;vis[]=;d[]=;
bool p=;
while(head!=tail){//
int x=q[head++];if(head>n)head=;
for(int i=first[x];i;i=e[i].from)if(d[x]+e[i].w<d[e[i].v]){
d[e[i].v]=d[x]+e[i].w;
step[e[i].v]=step[x]+;
if(step[e[i].v]>n){p=;break;}
if(!vis[e[i].v]){
if(d[e[i].v]<d[q[head]]){head--;if(head<)head=n;q[head]=e[i].v;}
else{q[tail++]=e[i].v;if(tail>n)tail=;}
vis[e[i].v]=;
}
}
vis[x]=;
}
return p;
} int main(){
scanf("%d%d%d",&n,&m,&k);
int u,v,w;
for(int i=;i<=n;i++)insert(i,i-,);
for(int i=;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
if(u>v)swap(u,v);
insert(u,v,w);
}
for(int i=;i<=k;i++){
scanf("%d%d%d",&u,&v,&w);
if(u>v)swap(u,v);
insert(v,u,-w);
}
if(spfa()){
if(d[n]==0x3f3f3f3f)printf("-2");else printf("%d",d[n]);
}else printf("-1");
return ;
}
【BZOJ】1731: [Usaco2005 dec]Layout 排队布局的更多相关文章
- bzoj 1731 [Usaco2005 dec]Layout 排队布局——差分约束
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1731 对差分约束理解更深.还发现美妙博客:http://www.cppblog.com/me ...
- bzoj 1731: [Usaco2005 dec]Layout 排队布局 ——差分约束
Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相 ...
- BZOJ 1731: [Usaco2005 dec]Layout 排队布局
Description Like everyone else, cows like to stand close to their friends when queuing for feed. FJ ...
- bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】
差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到"奶牛排在队伍中的顺序和它们的编号是相同的",所以\( d_i-d_{i-1}>= ...
- 1731: [Usaco2005 dec]Layout 排队布局*
1731: [Usaco2005 dec]Layout 排队布局 题意: n头奶牛在数轴上,不同奶牛可以在同个位置处,编号小的奶牛必须在前面.m条关系,一种是两头奶牛距离必须超过d,一种是两头奶牛距离 ...
- 【BZOJ1731】[Usaco2005 dec]Layout 排队布局 差分约束
[BZOJ1731][Usaco2005 dec]Layout 排队布局 Description Like everyone else, cows like to stand close to the ...
- 排队(BZOJ1731:[Usaco2005 dec]Layout 排队布局)
[问题描述] Czy喜欢将他的妹子们排成一队.假设他拥有N只妹纸,编号为1至N.Czy让他们站成一行,等待自己来派送营养餐.这些妹纸按照编号大小排列,并且由于它们都很想早点吃饭,于是就很可能出现多只妹 ...
- [Usaco2005 dec]Layout 排队布局 差分约束
填坑- 差分约束一般是搞一个不等式组,求xn-x1的最大最小值什么的,求最大值就转化成xa<=xb+w这样的,然后建图跑最短路(这才是最终约束的),举个例子 x1<=x0+2x2<= ...
- [bzoj1731] [Usaco2005 dec]Layout 排队布局
差分约束系统...因为题目要求的是1和n的最大距离所以这题就跑最长路.. 对于互相反感的牛(i与j互相反感,彼此距离至少为len,i<j),就有dis[j]-dis[i]>=len.就加一 ...
随机推荐
- 【week2】 词频统计第一次更新
词频统计: 对每个功能预计时间: 功能 预计(min) 实际(min) 数据流读入 20 40 正则规范字符串 15 20 排序 30 45 输出 20 30 其他 25 词频统计psp 日期 类 ...
- 使用gdb查看栈帧的情况, 没有ebp
0x7fffffffdb58: 0x004005ba 0x00000000 0x00000000 0x00000000 <-----funcb的栈帧 [0x7fffffffdb60, 0x ...
- Apache与Tomcat负载均衡
Apache HTTP Server 与 Tomcat 的三种连接方式JK,http_proxy,ajp_proxy.下面逐个介绍一下(本篇介绍的示例都是基于前面介绍的已经搭建好的Tomcat集群,都 ...
- 【Python】Python中的列表操作
Python的列表操作可谓是功能强大且方便(相对于Java)简单.常规的操作就不说了(这不是一个入门教程),介绍几个很有特点的例子 添加 # 追加到结尾(append) li = [1, 2, 3, ...
- SpringBoot事件监听
代码演示: package com.boot.event.eventdemo; import org.springframework.boot.SpringApplication; import or ...
- 【bzoj1304】[CQOI2009]叶子的染色 树形dp
题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点( ...
- Python文件对象的访问模式
- 转:浅谈深度学习(Deep Learning)的基本思想和方法
浅谈深度学习(Deep Learning)的基本思想和方法 参考:http://blog.csdn.net/xianlingmao/article/details/8478562 深度学习(Deep ...
- BZOJ4597:[SHOI2016]随机序列——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4597 你的面前有N个数排成一行.分别为A1, A2, … , An.你打算在每相邻的两个 Ai和 ...
- BZOJ3670 & 洛谷2375 & UOJ5:[NOI2014]动物园——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3670 https://www.luogu.org/problemnew/show/P2375#su ...