bzoj 1658: [Usaco2006 Mar]Water Slides 滑水(贪心)

1658: [Usaco2006 Mar]Water Slides 滑水

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 236  Solved: 157
[ Submit][ Status][ Discuss]

Description

It's a hot summer day, and Farmer John is letting Betsy go to the water park where she intends to ride every single slide. The water park has N (1 <= N <= 10,000) platforms (numbered 1..N) from which to enter the M (1 <= M <= 10,000) water slides. Each water slide starts at the top of some platform and ends at the bottom of some platform (possibly the same one). Some platforms might have more than one slide; some might not have any. The park is very thin, so the platforms lie along a straight line, each platform at a position Xi (0 <= Xi <= 100,000) meters from one end of the park. One walks from one platform to the next via a sidewalk parallel to the line of platforms.The platforms of the water park are weakly connected; that is, the park cannot be divided into two sets of platforms with no slides running between the two sets. Both the entrance and exit to the park are at platform 1, so Betsy will start and end there. In order to spend more time on the slides, Betsy wants to walk as little as possible. Find the minimum distance Betsy must travel along the ground in order to try every slide in the park exactly once without repeating.

    炎热的夏日里,约翰带贝茜去水上乐园滑水.滑水是在一条笔直的人工河里进行的,沿河设有N(1≤N≤10000)个中转站,并开通了M(1≤M≤10000)条滑水路线.路线的起点和终点总在某个中转站上,起点和终点可能相同.有些中转站可能是许多条路线的起点或终点,而有些站则可能没有在任何路线里被用上.贝茜希望能把所有的路线都滑一遍.所有中转站排成一条直线,每个中转站位于离河的源头Xi(0≤Xi≤100000)米处.沿着河边的人行道,贝茜可以从任意位置走到任意一个中转站.    中转站与滑水路线的布局满足下述的性质:任意两个中转站之间都有滑水路线直接成间接相连.水上乐园的入口与出口都在1号中转站旁,也就是说,贝茜的滑水路线的起点和终点都是1号中转站.

   为了更好地享受滑水的快乐,贝茜希望自己花在走路上的时间越少越好.请你帮她计算一下,如果按她的计划,把所有的路线都不重复地滑一遍,那她至少要走多少路.

Input

* Line 1: Two integers, N and M.

* Lines 2..N+1: Line i+1 contains one integer, Xi, the position of platform i. * Lines N+2..M+N+1: Line i+N+1 contains two integers, Si and Di, respectively the start and end platforms of a slide.

    第1行:两个整数N和M,用空格隔开.

    第2到N+1行:第i+l行包括一个整数Xi,表示i号中转站距河源头的距离.

    第N+2到M+N+1行:第i+N+1行包括两个整数Si和Di,分别表示了一条滑水路线的起点和终点.

Output

* Line 1: One integer, the minimum number of meters Betsy must walk.

    输出一个整数,即贝茜要走的路程长度至少为多少米

Sample Input

5 7
5
3
1
7
10
1 2
1 2
2 3
3 1
4 5
1 5
4 1

Sample Output

8


val[x]表示x点的入度与出度差(这个x是坐标,不是中转站(0<=x<=100000))

如果val[x]>0那么肯定要通过步行到达x点val[x]次

如果val[x]<0那么肯定要从x点步行出发val[x]次

很显然∑val[i]==0,最优解肯定是对于每个val[x]>0的x,找目前最近的val[x']<0的x',

从x'走到x,然后val[x]--, val[x']++

统计下val[x]然后拿双指针遍历一下就好

复杂度O(n)


#include<stdio.h>
#include<stdlib.h>
int val[10005], in[100005];
int main(void)
{
	int n, m, i, x, y, p, q, ans;
	scanf("%d%d", &n, &m);
	for(i=1;i<=n;i++)
		scanf("%d", &val[i]);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d", &x, &y);
		in[val[x]]++, in[val[y]]--;
	}
	p = q = ans = 0;
	while(p<=100000)
	{
		if(in[p]<=0)
			p++;
		else if(in[q]>=0)
			q++;
		else
		{
			ans += abs(p-q);
			in[p]--, in[q]++;
		}
	}
	printf("%d\n", ans);
	return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值