国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Layout POJ - 3169(差分約束) 題解

2019-11-08 02:31:48
字體:
來源:轉載
供稿:網友

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. 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 Sample Output 27 Hint Explanation of the sample:

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.


第一次接觸查分約束還是有點懵的,利用了最短路的不等式dis[j]>dis[i]+len[i]來考慮不等式的問題,這里i和j要保持距離k以內,就往i到j構造一條長度為k的路徑,保持k距離以外,就往j到i構造一條權值為-k的路徑,出現負環即為不能構造出來(我決定最后應該再判斷每個點的位置才對)。

#include<iostream>#include<string.h>#include<stdio.h>#include<string>#include<vector>#include<algorithm>using namespace std;int n,ml,md;int from[20005], len[20005], to[20005],dis[1005];int enumber;bool is_ans;void add(int x, int y, int z){ to[enumber] = y; from[enumber] = x; len[enumber++] = z;}void bellman(){ for (int i = 1; i <= n; i++){ bool relax = 0; for (int j = 0; j < enumber; j++){ int a = from[j], b = to[j], c = len[j]; if (dis[b]>dis[a] + c){ relax = 1; dis[b] = dis[a] + c; } } if (relax == 0)break; if (relax&&i == n)is_ans = 0; }}int main(){ int x, y, z; while (scanf("%d%d%d", &n, &ml, &md) != EOF){ enumber = 0; for (int i = 0; i < ml; i++){ scanf("%d%d%d", &x, &y, &z); if (x > y)swap(x, y); add(x, y, z); } for (int i = 0; i < md; i++){ scanf("%d%d%d", &x, &y, &z); if (x > y)swap(x, y); add(y, x, -z); } memset(dis, 0x3f, sizeof(dis)); dis[1] = 0; is_ans = 1; bellman(); if (is_ans == 0){
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 翁源县| 北安市| 合川市| 聂荣县| 台北市| 望城县| 遂平县| 南皮县| 霸州市| 潼关县| 靖远县| 崇州市| 和平县| 武穴市| 如皋市| 五家渠市| 伊吾县| 龙川县| 旬邑县| 德安县| 普洱| 闻喜县| 庆阳市| 顺昌县| 宁蒗| 扎兰屯市| 皋兰县| 伊春市| 镇江市| 稷山县| 平遥县| 南溪县| 保康县| 太湖县| 昔阳县| 遂溪县| 库尔勒市| 开原市| 波密县| 太仆寺旗| 邵阳县|