poj2128Highways

本文介绍了一种算法,用于解决在一个由多个城市组成且沿直线排列的国家中,如何修建两条不穿过城市的高速公路以实现任意两城间的便捷通行。目标是最小化新建高速公路的总长度。


把50000看成了5000, RE了好几次,没找到毛病,好伤
原文大意:
   修两条路,不能在城市中间穿过,输入第一行表示城市个数,第二行表示第i个城市到第一个城市的距离;输出第一行表示最小距离,
   第二行表示 两条公路连接的哪几个城市。


   思路:
   第一个城市到最后一个城市的距离加上两个城市间最小的距离(因为不让在城市里面穿过)
#include<iostream>
using namespace std;
long long int a[50001];
int main()
{
	int n;
	cin >> n;
	for (int i = 2; i <= n; ++i)  //i=1是第一个城市,i=2是第二个城市
		cin >> a[i];
	long long int min = 10000000001;int  temp1 = 0;
	for (int i = 3; i <= n - 1; ++i)  
	{
		if (min>a[i] - a[i-1])
		{
			min = a[i] - a[i-1];
			temp1 = i;
		}
			
	}
	if (n < 4)
	{
		cout << 0 << endl;
		return 0;
	}
	cout << a[n] + min << endl;
	cout << temp1 << " " << 1 << " " << n <<" "<< temp1-1<< endl;
	return 0;
}



Description


In a distant country Lineland there are N cities and they are all located along the highway. The highway is a straight line; it starts from the first city and runs through the second, third city and so on, ending in the N-th city. The i-th city is located at the distance of X i miles from the first one. 
The highway is wide and smooth, so it is a pleasure for all people to drive along it. But there is one problem --- all roads in Lineland, including the highway, are one-way. So people are only allowed to drive along the highway from the city with smaller number to the city with greater number and they have to use country roads to get back, and that is not such a great pleasure indeed. 
After the new president Mr. Pathwayson was elected in Lineland, he has decided that he would like to make it easier for people to get from one town to another. But he does not dare to change the traditions, and make the highway two-way. Therefore he has decided to build new highways to connect the cities, so that it would be possible to get from any city to any other one by highways. Traditionally, the new highways must be one-way. 
Of course, Mr. Pathwayson is a great president, and he wants people to remember him in years. After a thought he has decided that building just one highway would not be enough for that. Therefore he has decided that he must build two new highways. Each highway would connect two different cities. Since people are anxious about their health, and cars running along the highway produce dangerous wastes, each new highway must not pass through any cities, except the cities it connects. Also building two new highways in one city would disturb people too much, so all the cities that would be the ends of the new highways must be different. 
You are the assistant of the minister of transportation of Lineland, so you are asked to choose the cities to be connected by the new highways. Since the cost of building a highway is proportional to its length, the total length of the highways must be minimal possible. Write a program to solve this problem. You may assume that the distance between two cities along the new highway is equal to the distance between those cities along the main highway.
Input


The first line of the input contains N (2 <= N <= 50 000). 
Next line contains N - 1 integer numbers: X2 , X3 , . . . , XN (1 <= X2 < X3 < . . . < XN <= 109 ).
Output


If it is impossible to build the highways satisfying all requirements, print number 0 on the first line of the output. 
In the other case on the first line of the output file print the minimal possible total length of the highways to be built. On the second line print S1 , E1 , S2 and E2 --- the numbers of the cities to connect by the first and the second highway, respectively. Note that highways are one-way and must run from S1 to E1 and from S2 to E2 .
Sample Input


4
3 5 10
Sample Output


12
3 1 4 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值