S - Layout (最短路&&差分约束)
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
Hint
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.
The best layout, in terms of coordinates on a number line, is to put cow #1 at 0, cow #2 at 7, cow #3 at 10, and cow #4 at 27.
如果不存在任何一种排列方法满足条件,则输出-1,无限大则输出-2;

1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<queue>
6 using namespace std;
7 const int INF=0x3f3f3f3f;
8 int d[1005],dis[1005];
9 struct shudui
10 {
11 int start,value;
12 }str1;
13 vector<shudui>w[1005];
14 queue<int>r;
15 int main()
16 {
17 int n,m,k;
18 scanf("%d%d%d",&n,&m,&k);
19 while(m--)
20 {
21 int x,y,z;
22 scanf("%d%d%d",&x,&y,&z);
23 str1.start=y;
24 str1.value=z;
25 w[x].push_back(str1);
26 }
27 while(k--)
28 {
29 int x,y,z;
30 scanf("%d%d%d",&x,&y,&z);
31 str1.start=x;
32 str1.value=-z;
33 w[y].push_back(str1);
34 }
35 for(int i=1;i<n;++i)
36 {
37 str1.start=i;
38 str1.value=0;
39 w[i+1].push_back(str1);
40 }
41 memset(d,INF,sizeof(d));
42 r.push(1);
43 r.push(1);
44 d[1]=0;
45 int flag=0;
46 while(!r.empty())
47 {
48 int x=r.front();
49 r.pop();
50 int y=r.front();
51 r.pop();
52 dis[x]=0;
53 if(y>n)
54 {
55 flag=1;
56 break;
57 }
58 int len=w[x].size();
59 for(int i=0;i<len;++i)
60 {
61 str1=w[x][i];
62 if(d[str1.start]>d[x]+str1.value)
63 {
64 d[str1.start]=d[x]+str1.value;
65 if(dis[str1.start]) continue;
66 r.push(str1.start);
67 r.push(y+1);
68 }
69 }
70 }
71 if(d[n]!=INF && !flag)
72 printf("%d\n",d[n]);
73 else if(d[n]==INF) printf("-2\n");
74 else if(flag) printf("-1\n");
75 return 0;
76 }
我们还要考虑个问题
本题是让我们求最大值,但是我们建图后为什么求最短路而不是求最长路?
参考博客:https://www.cnblogs.com/cenariusxz/p/4785284.html
首先,我们在最短路初始化的时候所有点的dis值均为INF(极大值),也就是说一开始我们认为n点距离1点是无穷大的。
而对于某一条边 d[v] ≤ d[u] + w(即使≥的也是从这个式子转化而成的),也就是u和v之间距离不能超过w这个条件,只会在d[v] > d[u] + w的时候即u和v之间距离超过w时才会被用来松
弛,而松弛的结果也是使两点距离变成可接受范围内的最大值w,也就是每个边只是松弛到可接受范围内的最大值的。
如果u和v之间的距离已经被其他约束条件限制而小于w了,那么这个条件也就不会起作用也不会使其值更小了,因此最短路求的就是可接受范围内1到n距离的最大值了。
如果是 d[u] - d[v] < w,一般利用整数的情况,就是 d[u] - d[v] ≤ w - 1,也可以顺利建图。
如果是 d[u] - d[v] > w,则建立 d[v] - d[u] ≤ -w-1。
建图之后最大值求最短路,最小值求最长路即可。
更多差分约束题目见:https://blog.csdn.net/whereisherofrom/article/details/78922648
S - Layout (最短路&&差分约束)的更多相关文章
- POJ-3169 Layout 最短路 差分约束
题目链接:https://cn.vjudge.net/problem/POJ-3169 题意 Farmer John手下的一些牛有自己喜欢的牛,和讨厌的牛 喜欢的牛之间希望距离在给定距离D之内 讨厌的 ...
- [Usaco2005 dec]Layout 排队布局 差分约束
填坑- 差分约束一般是搞一个不等式组,求xn-x1的最大最小值什么的,求最大值就转化成xa<=xb+w这样的,然后建图跑最短路(这才是最终约束的),举个例子 x1<=x0+2x2<= ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- POJ 3169 Layout (图论-差分约束)
Layout Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6574 Accepted: 3177 Descriptio ...
- 【最短路·差分约束】洛谷P1250
题目描述 一条街的一边有几座房子.因为环保原因居民想要在路边种些树.路边的地区被分割成块,并被编号成1..N.每个部分为一个单位尺寸大小并最多可种一棵树.每个居民想在门前种些树并指定了三个号码B,E, ...
- Candies POJ - 3159 (最短路+差分约束)
During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher b ...
- bzoj 1731: [Usaco2005 dec]Layout 排队布局 ——差分约束
Description 当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些.FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食.奶牛排在队伍中的顺序和它们的编号是相 ...
- 转载 - 最短路&差分约束题集
出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★ ...
- 最短路 & 差分约束 总结
一.引例 1.一类不等式组的解 二.最短路 1.Dijkstra 2.图的存储 3.链式前向星 4.Dijkstra + 优先队列 ...
随机推荐
- SQL注入-流程
一般注入分类: 时间,布尔,报错,堆,联合 有关函数介绍: current_user() 当前用户名 session_user() 链接数据库的用户名 @@basedir mysql安装路径 @@da ...
- 【LeetCode】数组排序题 Array_Sorts
数组排序 Array_Sorts LeetCode 数组排序题 88. 合并两个有序数组 合并两个有序数组 难度简单 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nu ...
- canvas多重阴影发光效果
canvas多重阴影发光效果 前言 在一个项目中,客户提了一个发光的效果,效果图如下: 阴影 有的人可能会说,这个用阴影其实就可以实现.但是从图中可以看出,是一个比较强烈的发光效果.实际的应用过程中我 ...
- 第一章:起步(python环境搭建)
Python 环境搭建 学习python的第一步,就是要学习python开发环境的配置,在配置好python开发环境后,你需要再安装一款比较趁手的编辑器,事实上,python解释器本身就可以进行一些编 ...
- k8s-jenkins持续发布tomcat项目
k8s-jenkins持续发布tomcat项目 一.需求 这个实验前期后后搞了很久(公司经常插一些别的事过来,然后自己比较懒,再加上自己知识不够扎实).二进制部署完k8s集群就开始做jenkins持续 ...
- vue首次加载白屏过渡动画(vue优化)
过渡动画需要在index.html文件里面添加 1.css,在public.index.css创建index.css html, body, #app { height: 100%; margin: ...
- windows ping bat脚本
参考百度链接:https://zhidao.baidu.com/question/577024998.html 要求:1.从同级目录下读取iplist.txt文件内的ip/域名列表(每行一个):2.对 ...
- 主题模型(Topic)
消息队列 RocketMQ - 打造金融级消息服务 - 阿里云 https://www.aliyun.com/product/rocketmq 主题模型(Topic) 发布/订阅(Pub/Sub) 一 ...
- MFA
什么是 MFA?_启用和解绑MFA_账号常见问题_账号管理-阿里云 https://help.aliyun.com/knowledge_detail/37215.html
- Language Guide (proto3) | proto3 语言指南(十一)包
Packages - 包 可以向.proto文件中添加可选的package明符,以防止协议消息类型之间的名称冲突. package foo.bar; message Open { ... } 然后你可 ...