题目描述

原题来自:USACO 2005 Dec. Gold

FJ 有 n 头奶牛(2<=n<=1000) ,编号为1..n 。奶牛们将按照编号顺序排成一列队伍(可能有多头奶牛在同一位置上)。换句话说,假设 i 号奶牛位于 p_i,则 p_1<=p_2<=...<=p_n。

有些奶牛是好基友,它们希望彼此之间的距离小于等于某个数。有些奶牛是情敌,它们希望彼此之间的距离大于等于某个数。

给出 m_l 对好基友的编号,以及它们希望彼此之间的距离小于等于多少;又给出 m_d 对情敌的编号,以及它们希望彼此之间的距离大于等于多少  (1<=m_l,m_d<=1e4)。

请计算:如果满足上述所有条件,1 号奶牛和 n 号奶牛之间的距离(p_n-p_1)最大为多少。

输入格式

第一行:三个整数 n,m_l,m_d,用空格分隔。
第 2...m_l+1 行:每行三个整数 a,b,d,用空格分隔,表示P_b-p_a<=d 。
第 m_l+2.. m_l+m_d+1 行:每行三个整数 a,b,d,用空格分隔,表示P_b-p_a>=d 。
保证 1<=a<=b<=n,1<=d<=1e6 。

输出格式

一行,一个整数。如果没有合法方案,输出 -1. 如果有合法方案,但 1 号奶牛可以与 n 号奶牛相距无穷远,输出-2 . 否则,输出 1 号奶牛与 n 号奶牛间的最大距离。

样例
输入复制
4 2 1
1 3 10
2 4 20
2 3 3
输出复制
27

这四头牛分别位于 0,7,10,27。

______________________
 
差分约束
注意,1号店约束不到n好点,但是其余的点中间构成负环的情况!!!
如:
10 2 1
2 3 2
3 4 2
2 4 1012

______________________

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=1010;
4 const int maxm=1e4+10;
5 int n,ml,md;
6 struct edge
7 {
8 int u,v,nxt;
9 long long w;
10 }e[maxm*4];
11 int head[maxn],js;
12 void addage(int u,int v,long long w)
13 {
14 e[++js].u=u;e[js].v=v;e[js].w=w;
15 e[js].nxt=head[u];head[u]=js;
16 }
17 long long dis[maxn];
18 bool inq[maxn];
19 deque<int>q;
20 int cs[maxn];
21 bool spfa()
22 {
23 memset(dis,0x3f,sizeof dis);
24 inq[0]=1;dis[0]=0;
25 q.push_back(0);++cs[0];
26 while(!q.empty())
27 {
28 int u=q.front();q.pop_front();inq[u]=0;
29 for(int i=head[u];i;i=e[i].nxt)
30 {
31 int v=e[i].v,w=e[i].w;
32 if(dis[v]>dis[u]+w)
33 {
34 dis[v]=dis[u]+w;
35 if(!inq[v])
36 {
37 inq[v]=1;++cs[v];
38 if(cs[v]>n)return 0;
39 if(!q.empty()&& dis[v]<=dis[q.front()])q.push_front(v);
40 else q.push_back(v);
41 }
42 }
43 }
44 }
45 return 1;
46 }
47 int main()
48 {
49 scanf("%d%d%d",&n,&ml,&md);
50 for(int i=1;i<n;++i)addage(i+1,i,0),addage(0,i,0x3f3f3f3f3f3f3f3f);
51 addage(0,1,0);
52 for(int a,b,d,i=1;i<=ml;++i)
53 {
54 scanf("%d%d%d",&a,&b,&d);
55 addage(a,b,d);
56 }
57 for(int a,b,d,i=1;i<=md;++i)
58 {
59 scanf("%d%d%d",&a,&b,&d);
60 addage(b,a,-d);
61 }
62 if(spfa()==0)puts("-1");
63 else if(dis[n]==0x3f3f3f3f3f3f3f3f)puts("-2");
64 else printf("%lld",dis[n]);
65
66 return 0;
67 }

LOJ10090的更多相关文章

随机推荐

  1. [leetcode299] 299. Bulls and Cows

    public String getHint(String secret, String guess) { /* 判断bull 是通过比较两个字符串的每一位,每次相同就删除该字符出现的次数,因为后边的 ...

  2. 数据接口请求异常:parsererror

    问题一:直接拿别人的文件放在本地打开 如下图 原因:这是提示"交叉源请求仅支持协议方案:HTTP.数据.Chrome.Chrome扩展.HTTPS." 也就是你不能用本地文件打开, ...

  3. vue vue-cli postcss-sprites 配置

    vue-cli2.x创建完项目 安装postcss-sprites yarn add postcss-sprites -D 根目录配置postcss.config.js配置中,需要注意,1:当有用px ...

  4. 基础篇:JAVA原子组件和同步组件

    前言 在使用多线程并发编程的时,经常会遇到对共享变量修改操作.此时我们可以选择ConcurrentHashMap,ConcurrentLinkedQueue来进行安全地存储数据.但如果单单是涉及状态的 ...

  5. maven打包 依赖jar与不依赖jar

    ?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="http://maven.a ...

  6. 【函数分享】每日PHP函数分享(2021-1-11)

    str_shuffle() 随机打乱一个字符串. string str_shuffle ( string $str ) 参数描述 str     输入字符串.返回值:返回打乱后的字符串.实例: < ...

  7. Appium 介绍及环境安装

    Appium是一个可用于测试iOS. Android操作系统和Windows桌面平台原生应用,移动网页应用和混合应用的自动化测试框架. 原生应用(Native App):用 android.iOS或者 ...

  8. 【译】Async/Await(一)——多任务

    原文标题:Async/Await 原文链接:https://os.phil-opp.com/async-await/#multitasking 公众号: Rust 碎碎念 翻译 by: Praying ...

  9. (二)数据源处理5-excel数据转换实战(上)

    把excel_oper02.py 里面实现的:通过字典的方式获取所有excel数据.放进utils: ️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️ utils: def get_al ...

  10. Java设计模式精讲之UML急速入门

    简单记录 - 慕课网 - Java设计模式精讲 Debug方式+内存分析 文章目录 第2章 UML急速入门 2-1.UML简单入门 UML定义 UML特点 UML 2.2分类 UML类图 理解泛化.实 ...