poj 3169 Layout(差分约束)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 6549 | Accepted: 3168 |
Description
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.
Input
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
Sample Input
4 2 1
1 3 10
2 4 20
2 3 3
Sample Output
27
解题思路:
1、构造差分约束系统:
A。B距离不超过D则B-A<=D,
A,B距离至少为D则A-B<=-D.
2、若有解则求1和N之间的最短路径:
比如:A-B<=D1 , B-C<=D2, A-C<=D3 不等式相加得:A-C<=min(D3,D1+D2)。而当A-B<=D时。我们建的边是B->A的。所以我们仅仅要求出1到N的最短距离就可以,假设没有最短距离。则输出-2.
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std; const int maxne = 1000000;
const int maxnn = 1010;
const int INF = 0x3f3f3f3f;
struct edge{
int u , v , d;
edge(int a = 0 , int b = 0 , int c = 0){
u = a , v = b , d = c;
}
}e[maxne];
int head[maxnn] , next[maxne] , cnt , dis[maxnn] , vis[maxnn] , vt[maxnn];
int N , ML , MD; void add(int u , int v , int d){
e[cnt] = edge(u , v , d);
next[cnt] = head[u];
head[u] = cnt++;
} void initial(){
for(int i = 0; i < maxnn; i++) head[i] = -1 , dis[i] = INF , vis[i] = 0 , vt[i] = 0;
for(int i = 0; i < maxne; i++) next[i] = -1;
cnt = 0;
for(int i = 1; i < N; i++){
add(0 , i , 0);
add(i+1 , i , 0);
}
add(0 , N , 0);
dis[0] = 0;
} void readcase(){
int u , v , d;
while(ML--){
scanf("%d%d%d" , &u , &v , &d);
add(u , v , d);
}
while(MD--){
scanf("%d%d%d" , &u , &v , &d);
add(v , u , -1*d);
}
} bool SPFA(int start){
queue<int> q;
q.push(start);
vt[start]++;
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 0;
int n = head[u];
if(vt[u] > N+1){
return false;
}
while(n != -1){
int v = e[n].v;
if(dis[v] > dis[u]+e[n].d){
dis[v] = dis[u]+e[n].d;
if(vis[v] == 0){
vt[v]++;
q.push(v);
vis[v] = 1;
}
}
n = next[n];
}
}
return true;
} void computing(){
if(!SPFA(0)){
printf("-1\n");
}else{
for(int i = 0; i < maxnn; i++) dis[i] = INF;
dis[1] = 0;
SPFA(1);
if(dis[N] == INF){
printf("-2\n");
}else{
printf("%d\n" , dis[N]);
}
}
} int main(){
while(scanf("%d%d%d" , &N , &ML , &MD) != EOF){
initial();
readcase();
computing();
}
return 0;
}
poj 3169 Layout(差分约束)的更多相关文章
- POJ 3169 Layout(差分约束+链式前向星+SPFA)
描述 Like everyone else, cows like to stand close to their friends when queuing for feed. FJ has N (2 ...
- POJ 3169 Layout (差分约束)
题意:给定一些母牛,要求一个排列,有的母牛距离不能超过w,有的距离不能小于w,问你第一个和第n个最远距离是多少. 析:以前只是听说过个算法,从来没用过,差分约束. 对于第 i 个母牛和第 i+1 个, ...
- POJ 3169 Layout(差分约束啊)
题目链接:http://poj.org/problem? id=3169 Description Like everyone else, cows like to stand close to the ...
- poj 3169 Layout 差分约束模板题
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6415 Accepted: 3098 Descriptio ...
- POJ 3169 Layout(差分约束 线性差分约束)
题意: 有N头牛, 有以下关系: (1)A牛与B牛相距不能大于k (2)A牛与B牛相距不能小于k (3)第i+1头牛必须在第i头牛前面 给出若干对关系(1),(2) 求出第N头牛与第一头牛的最长可能距 ...
- ShortestPath:Layout(POJ 3169)(差分约束的应用)
布局 题目大意:有N头牛,编号1-N,按编号排成一排准备吃东西,有些牛的关系比较好,所以希望他们不超过一定的距离,也有一些牛的关系很不好,所以希望彼此之间要满足某个关系,牛可以 ...
- poj 3169&hdu3592(差分约束)
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9687 Accepted: 4647 Descriptio ...
- Bellman-Ford算法:POJ No.3169 Layout 差分约束
#define _CRT_SECURE_NO_WARNINGS /* 4 2 1 1 3 10 2 4 20 2 3 3 */ #include <iostream> #include & ...
- POJ 3169 Layout 差分约束系统
介绍下差分约束系统:就是多个2未知数不等式形如(a-b<=k)的形式 问你有没有解,或者求两个未知数的最大差或者最小差 转化为最短路(或最长路) 1:求最小差的时候,不等式转化为b-a>= ...
- POJ 3169 Layout (spfa+差分约束)
题目链接:http://poj.org/problem?id=3169 差分约束的解释:http://www.cnblogs.com/void/archive/2011/08/26/2153928.h ...
随机推荐
- Pandas中loc,iloc与直接切片的区别
最近使用pandas,一直搞不清楚其中几种切片方法的区别,今天专门看了一下. 0. 把Series的行index或Dataframe的列名直接当做属性来索引. 如: s.index_name df.c ...
- LeetCode(8)String to Integer (atoi)
题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ca ...
- 【SaltStack】SaltStack研究心得
基础篇 ------------------------------------------------------------------------------------------------ ...
- Service Broadcast简单音乐播放功能
在Activity上有两个ImageButton,分别控制播放/暂停.停止. @Override public void onCreate(Bundle savedInstanceState) ...
- move_uploaded_file failed to open stream permission denied
Make sure that: IWPG_user, where user is a system user of the subscription who has rights to "R ...
- 【bzoj2115】[Wc2011] Xor【高斯消元】
题目大意:给出一个无向有权图,找出一条从1到n的路径,使得路径上权值的异或和最大,路径可以重复走 Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条 ...
- Spring JdbcTemplate 查询方法中的RowMapper实现汇总
实现一.在内部建立内联类实现RowMapper接口 package hysteria.contact.dao.impl; import java.sql.ResultSet; import java. ...
- linux和windows下分别如何查看电脑是32位的还是64位?
WINDOWS下查看的方法: 方法一. 在开始→运行中输入“winver”,如果您的系统是64位的,会明确标示出“x64 edition”. 方法二.(推荐) 在cmd窗口中输入systeminfo回 ...
- poj 1486 Sorting Slides
Sorting Slides Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4469 Accepted: 1766 De ...
- nosql整理
Nosql: Redis,Memcache,MongoDB,Hbase,Couchbase LevelDB https://www.cnblogs.com/lina520/p/7919551.htm ...