【bzoj1731】[Usaco2005 dec]Layout 排队布局
来源:互联网 发布:python xml解析 编辑:程序博客网 时间:2024/05/24 02:45
Description
Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 <= N <= 1,000) cows numbered 1..N standing along a straight line waiting for feed. The cows are standing in the same order as they are numbered, and since they can be rather pushy, it is possible that two or more cows can line up at exactly the same location (that is, if we think of each cow as being located at some coordinate on a number line, then it is possible for two or more cows to share the same coordinate). Some cows like each other and want to be within a certain distance of each other in line. Some really dislike each other and want to be separated by at least a certain distance. A list of ML (1 <= ML <= 10,000) constraints describes which cows like each other and the maximum distance by which they may be separated; a subsequent list of MD constraints (1 <= MD <= 10,000) tells which cows dislike each other and the minimum distance by which they must be separated. Your job is to compute, if possible, the maximum possible distance between cow 1 and cow N that satisfies the distance constraints.
当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食。奶牛排在队伍中的顺序和它们的编号是相同的。因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。即使说,如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L。另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D。给出ML条关于两头奶牛间有好感的描述,再给出MD条关于两头奶牛间存有反感的描述。(1<=ML,MD<=10000,1<=L,D<=1000000)你的工作是:如果不存在满足要求的方案,输出-1;如果1号奶牛和N号奶牛间的距离可以任意大,输出-2;否则,计算出在满足所有要求的情况下,1号奶牛和N号奶牛间可能的最大距离。
Input
- Line 1: Three space-separated integers: N, ML, and MD. * Lines 2..ML+1: Each line contains three space-separated positive integers: A, B, and D, with 1 <= A < B <= N. Cows A and B must be at most D (1 <= D <= 1,000,000) apart. * Lines ML+2..ML+MD+1: Each line contains three space-separated positive integers: A, B, and D, with 1 <= A < B <= N. Cows A and B must be at least D (1 <= D <= 1,000,000) apart.
Output
- Line 1: A single integer. If no line-up is possible, output -1. If cows 1 and N can be arbitrarily far apart, output -2. Otherwise output the greatest possible distance between cows 1 and N.
Sample Input
4 2 1
1 3 10
2 4 20
2 3 3
INPUT DETAILS:
There are 4 cows. Cows #1 and #3 must be no more than 10 units
apart, cows #2 and #4 must be no more than 20 units apart, and cows#2 and #3 dislike each other and must be no fewer than 3 units apart.
Sample Output
27
四只牛分别在0,7,10,27.
题解
第一道差分约束题。
对于约束条件,转化为di-dj<=x;求dn-d1最大值;
于是对于di-dj<=x,由j向i连x的边,跑最短路。
如果存在负环,输出-1;
代码
#include<bits/stdc++.h>#define inf 10000000000000#define N 500005#define ll long longusing namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int n,a,b,tot,Head[1005],sum[1005];int ret[20005],Next[20005],len[20005];ll dis[1005];bool flag[1005];queue<int> q;inline int ins(int u,int v,int l){ ret[++tot]=v;len[tot]=l; Next[tot]=Head[u];Head[u]=tot;}int spfa(){ for (int i=1;i<=n;i++) dis[i]=inf; dis[1]=0;q.push(1);flag[1]=1;sum[1]=1; while (!q.empty()) { int u=q.front();q.pop(); for (int i=Head[u];i;i=Next[i]) { int v=ret[i]; if (dis[v]>dis[u]+len[i]) { dis[v]=dis[u]+len[i]; if (!flag[v]) { q.push(v); sum[v]++; if (sum[v]>n) return -1; flag[v]=1; } } } flag[u]=0; } if (dis[n]!=inf) return dis[n]; else return -2;}int main(){ n=read();a=read();b=read(); for (int i=1;i<=a;i++) { int x=read(),y=read(),l=read(); if (x>y) swap(x,y); ins(x,y,l); } for (int i=1;i<=b;i++) { int x=read(),y=read(),l=read(); if (x>y) swap(x,y); ins(y,x,-l); } for (int i=2;i<=n;i++) ins(i,i-1,0); printf("%d",spfa()); return 0;}
- bzoj1731/poj3169[Usaco2005 dec]Layout 排队布局
- 【bzoj1731】[Usaco2005 dec]Layout 排队布局
- 【bzoj1731】[Usaco2005 dec]Layout 排队布局 差分约束
- BZOJ1731: [Usaco2005 dec]Layout 排队布局 差分约束 spfa
- [BZOJ1731][Usaco2005 dec]Layout 排队布局(差分约束)
- bzoj1731[Usaco2005 dec]Layout 排队布局 差分约束
- bzoj1731 [Usaco2005 dec]Layout 排队布局(差分约束+spfa)
- bzoj 1731: [Usaco2005 dec]Layout 排队布局
- POJ 3169/BZOJ 1731: [Usaco2005 dec]Layout 排队布局
- BZOJ 1731: [Usaco2005 dec]Layout 排队布局 差分约束
- bzoj 1731: [Usaco2005 dec]Layout 排队布局 差分约束
- [Usaco2005 dec]Layout 排队布局 差分约束
- 【bzoj1731】【排队布局】【差分约束】
- 1673: [Usaco2005 Dec]Scales 天平
- bzoj1673: [Usaco2005 Dec]Scales 天平
- 1673: [Usaco2005 Dec]Scales 天平
- 【bzoj1673】[Usaco2005 Dec]Scales 天平
- [bzoj1673][Usaco2005 Dec]Scales 天平
- 访问Oracle数据库的四款工具软件介绍
- 【简记】Java Web 内幕——AOP源码
- MATLAB实现PFFM算法
- Vim技能修炼教程(7)
- [bzoj3698]XWW的难题 有源汇的上下界最大流
- 【bzoj1731】[Usaco2005 dec]Layout 排队布局
- 解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件的问题
- String所有方法
- Ajax获取数据的几种格式和解析方式
- oracle编译存储过程提示表或视图不存在的问题分析
- 数据结构 学习笔记(十一):排序(下):快速 / 表 / 桶 / 基数 排序,排序算法的比较
- spark基础知识之 spark RDD <四>
- CSDN-markdown
- Vue.js 基本功能了解