LOJ10090
原题来自: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 号奶牛间的最大距离。
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的更多相关文章
随机推荐
- centos升级系统自带的python2.6为python2.7
转自:https://www.cnblogs.com/terryguan/p/7233801.html 查看当前系统中的 Python 版本 python --version 返回 Python 2. ...
- [leetcode]242. Valid Anagram判断两个字符串是不是包含相同字符的重排列
/* 思路是判断26个字符在两个字符串中出现的次数是不是都一样,如果一样就返回true. 记住这个方法 */ if (s.length()!=t.length()) return false; int ...
- js表单简单验证(手机号邮箱)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncod ...
- zookeeper选举算法
一.ZAB协议三阶段 – 发现(Discovery),即选举Leader过程– 同步(Synchronization),选举出新的Leader后,Follwer或者Observer从Leader同步最 ...
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 写入和查询)--学习笔记
2.5.3 MongoDB -- 写入和查询 写入 查询 查找操作符 逻辑操作符 其他 嵌套对象 数组 游标方法 写入 https://docs.mongodb.com/manual/tutorial ...
- 30天自制OS(linux环境)-day1
30天自制OS(linux环境)--第一天 我是在CentOS的环境上面实现的,使用ubuntu的环境也是类似的 第一步:因为要对二进制文件进行编辑,所以安装二进制编辑器hexedit(当然其他的也可 ...
- 「珍贵历史资料鉴赏」CF786B 题解
写在前面 偶然翻到一篇 2019-08-07 18:58 写的未发布的题解. 给大家找点乐子玩. 正文 知识点:线段树优化建图 线段树优化建图 用于解决 类似 从 x 向区间[L,R]的 区间连边问题 ...
- Nebula Exchange 工具 Hive 数据导入的踩坑之旅
摘要:本文由社区用户 xrfinbj 贡献,主要介绍 Exchange 工具从 Hive 数仓导入数据到 Nebula Graph 的流程及相关的注意事项. 1 背景 公司内部有使用图数据库的场景,内 ...
- 【项目实践】一文带你搞定Session和JWT的登录认证方式
以项目驱动学习,以实践检验真知 前言 登录认证,估计是所有系统中最常见的功能了,并且也是最基础.最重要的功能.为了做好这一块而诞生了许多安全框架,比如最常见的Shiro.Spring Security ...
- uni-app阻止事件向父级冒泡
在官网找到的就只有这个方法,但是我放在app项目里并不支持,所以就想到vue的阻止事件冒泡的方法,现在分享,免得大家踩坑 <view class="parent" @ ...