C++之路进阶codevs1242(布局)

1242 布局

2005年USACO

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 黄金 Gold

<:section class="hbox"><:aside class="col-sm-11 bg-white-only">

题目描述 Description

当排队等候喂食时,奶牛喜欢和它们的朋友站得靠近些。FJ有N(2<=N<=1000)头奶牛,编号从1到N,沿一条直线站着等候喂食。奶牛排在队伍中的顺序和它们的编号是相同的。因为奶牛相当苗条,所以可能有两头或者更多奶牛站在同一位置上。即使说,如果我们想象奶牛是站在一条数轴上的话,允许有两头或更多奶牛拥有相同的横坐标。

一些奶牛相互间存有好感,它们希望两者之间的距离不超过一个给定的数L。另一方面,一些奶牛相互间非常反感,它们希望两者间的距离不小于一个给定的数D。给出ML条关于两头奶牛间有好感的描述,再给出MD条关于两头奶牛间存有反感的描述。(1<=ML,MD<=10000,1<=L,D<=1000000)

你的工作是:如果不存在满足要求的方案,输出-1;如果1号奶牛和N号

奶牛间的距离可以任意大,输出-2;否则,计算出在满足所有要求的情况下,1号奶牛和N号奶牛间可能的最大距离。

输入描述 Input Description

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 Description

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

数据范围及提示 Data Size & Hint

题解

差分!!!(我不太会,待学习...)

 1 #include<cstdio>
 2 #include<queue>
 3 #include<iostream>
 4 #include<algorithm>
 5 #define maxn 10000+10
 6 #define INF 0x7fffffff
 7
 8 using namespace std;
 9
10 int head[maxn],cnt,dis[maxn],vis[maxn],inq[maxn],n,ml,md;
11
12 struct ss
13    {
14         int to,next,edge;
15    }e[100000<<1];
16
17 void insert(int u,int v,int edge)
18    {
19         e[++cnt].to=v,e[cnt].next=head[u],e[cnt].edge=edge,head[u]=cnt;
20    }
21
22 int spfa()
23     {
24       queue<int>que;
25       dis[1]=0;
26       vis[1]=1;
27       inq[1]++;
28       que.push(1);
29       int flag=0;
30       while (!que.empty())
31          {
32              int now=que.front();que.pop();vis[now]=0;
33              for (int i=head[now];i;i=e[i].next)
34                  {
35                     if (dis[e[i].to]>dis[now]+e[i].edge)
36                        {
37                          dis[e[i].to]=dis[now]+e[i].edge;
38                          if (!vis[e[i].to])
39                          {
40                            vis[e[i].to]=1;que.push(e[i].to);
41                            inq[e[i].to]++;
42                            if (inq[e[i].to]>n) return -1;
43                          }
44                       }
45
46                  }
47          }
48       return dis[n];
49     }
50
51 int main()
52    {
53         scanf("%d%d%d",&n,&ml,&md);
54         for (int i=1;i<=ml;i++)
55             {
56                 int x,y,z;
57                 scanf("%d%d%d",&x,&y,&z);
58                 insert(x,y,z);
59             }
60        for (int i=1;i<=md;i++)
61          {
62            int x,y,z;
63            scanf("%d%d%d",&x,&y,&z);
64            insert(y,x,-z);
65          }
66     for (int i=1;i<=n;i++) dis[i]=INF;
67     int ans=spfa();
68     if (ans==INF) cout<<-2<<endl;
69          else cout<<ans<<endl;
70     return 0;
71    }
时间: 2024-10-20 09:57:25

C++之路进阶codevs1242(布局)的相关文章

Qt 学习之路:元素布局

上一章我们介绍了 QML 中用于定位的几种元素,被称为定位器.除了定位器,QML 还提供了另外一种用于布局的机制.我们将这种机制成为锚点(anchor).锚点允许我们灵活地设置两个元素的相对位置.它使两个元素之间形成一种类似于锚的关系,也就是两个元素之间形成一个固定点.锚点的行为类似于一种链接,它要比单纯地计算坐标改变更强.由于锚点描述的是相对位置,所以在使用锚点时,我们必须指定两个元素,声明其中一个元素相对于另外一个元素.锚点是Item元素的基本属性之一,因而适用于所有 QML 可视元素. 一

CSS进阶之布局模型

CSS中含有三种布局模型 流动模型Flow 浮动模型Float 层模型Layer 流动模型 网页默认的布局模型 特点有两个 1.块状元素都会在所处的包含元素内自上而下按顺序垂直延伸分布,因为在默认状态下,块状元素的宽度都为100%.实际上,块状元素都会以行的形式占据位置. <style type="text/css">     h1,p,div{         border:1px solid red;     } </style> 2.在流动模型下,内联元素

程序猿小白成长之路[初级框架布局]

HTML框架布局 AJAX: 是JavaScript中的一个技术,需要先掌握JavaScript;AJAX是请求接口用的 frameset标签 frame 标签 框架页面的基本架构 水平布局 cols:表示子框架水平排列 垂直布局 rows:定义垂直布局的框架集 混合框架集 cols & rows 为框架添加内容 使用 style属性定义一个标签的内联样式 框架中的导航 框架的尺寸可以通过拖动边框来调整的,如何是边框固定? 1-1在源代码中为 frameset标签设置 一个属性noresize

C++之路进阶——最大流(紧急疏散)

3566 紧急疏散 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 发生了火警,所有人员需要紧急疏散!假设每个房间是一个N M的矩形区域.每个格子如果是'.',那么表示这是一块空地:如果是'X',那么表示这是一面墙,如果是'D',那么表示这是一扇门,人们可以从这儿撤出房间.已知门一定在房间的边界上,并且边界上不会有空地.最初,每块空地上都有一个人,在疏散的时候,每一秒钟每个人都可以向上下左右四个方向移动一格,当然他也可以站着不动

C++之路进阶——最小费用最大流(善意的投票)

2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1304  Solved: 702[Submit][Status][Discuss] Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都很可口,厨师做菜的速度也很快,小M仍然觉得自己桌上没有已经摆在别人

C++之路进阶——最大流(善意的投票)

F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  hyxzc Logout 捐赠本站 Notice:由于本OJ建立在Linux平台下,而许多题的数据在Windows下制作,请注意输入.输出语句及数据类型及范围,避免无谓的RE出现. 1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 1646  Solved: 1006[

C++之路进阶——矩阵乘法(Xn数列)

1281 Xn数列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn m, a, c, x0, n, g<=10^18 输入描述 Input Description 一行六个数 m, a, c, x0, n, g 输出描述 Output Description 输出一个数 Xn mod g 样例输入 Sample Inpu

C++之路进阶——最小费用最大流(支线剧情)

F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser  hyxzc Logout 捐赠本站 Notice:由于本OJ建立在Linux平台下,而许多题的数据在Windows下制作,请注意输入.输出语句及数据类型及范围,避免无谓的RE出现. 3876: [Ahoi2014]支线剧情 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 542  Solved: 332[Submit

c++之路进阶——treap树(普通平衡树)

4543 普通平衡树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description 这是一道水题 顺便祝愿LEZ和ZQQ 省选AKAKAK 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数,因输出最小的排名)4. 查询排名为x的数5. 求x的前驱(前驱定义为小于x,且最大的数)6. 求x的后继(后继定义为大