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的更多相关文章
随机推荐
- 【vue-1】vue-cli3.0以上的搭建与配置(2.X的版本是不一样的)
为什么要使用 vue-cli Vue CLI 致力于将 Vue 生态中的工具基础标准化.它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问 ...
- Zookeeper一致性协议——ZAB
ZAB协议简介 Zookeeper通过ZAB保证分布式事务的最终一致性. ZAB全称Zookeeper Atomic Broadcast(ZAB,Zookeeper原子消息广播协议) ZAB是一种专门 ...
- HTML学习案例-仿慕课网网页制作(二)
制作部分:网页footer部分 制作效果: 涉及知识:link部分要复习: dl- definition list dt- definition title dd - definition descr ...
- 7.24,《C Primer Plus》复习第十五章第二小题
编写一个程序,通过命令行参数读取两个二进制字符串,对这两个二进制数使用~运算符,&运算符.|运算符,并以二进制字符串形式打印结果(如果无法使用命令行环境,可以通过交互式让程序读取字符串) 编写 ...
- java数组基础知识
数组的定义:int[] array=new array[n];int array[]={, , , ,};定义了数组,JVM就会给其一个空间,数组是应用类型的数据类型,其存储方式是随机存储. 数组的遍 ...
- springboot源码解析-管中窥豹系列之总体结构(一)
一.简介 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- NVL函数:空值转换函数
NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转换成一个实际的值.其表达式的值可以是数字型.字符型和日期型. ...
- Apache下的配置文件httpd.conf、httpd-vhosts.conf 转
Apache下的配置文件httpd.conf.httpd-vhosts.conf(windows) 2013-05-24 22:09 by youxin, 58 阅读, 0 评论, 收藏, 编辑 ht ...
- 20210105 - python自动化办公简介
新的一年开始了, 计划每周至少更新三篇博客. 人生苦短,如果不做改变,人生很快会过去!2021年寻求改变,加油! python自动化办公: 1.相关工具与环境的安装概要: 需要用到python(一种开 ...
- 剑指offer 面试题10.1:青蛙跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 编程思想 对于本题,前提只有 一次 1阶或者2阶的跳法.a.如果两种跳 ...