Re: 10801 - Lift Hopping
Posted: Tue Sep 25, 2012 1:07 am
20 seconds riding the first elevator.
http://www.uvatoolkit.com/problemssolve.php
http://www.uvatoolkit.com/problemssolve.php
Code: Select all
3 2
100 5 3
0 1 2
1 2
1 2
3 2
100 5 3
0 1 2
0 1
1 2
Code: Select all
163
68
Code: Select all
Cut after AC :)
Code: Select all
3 30
100 100 1
0 2 4 5 6 7 8 21 22 23 24 25 26 30
1 2 19 11 12 13 14 15 16 30
1 10 30
2 99
100 1
0 1 98 99
1 98
3 1
100 10 100
0 1
0 1
0 1
2 5
1 1
0 3
4 5
4 89
7 2 4 8
3 34 45 56 77
4 23 34 89
0 99
3 99
5 99
12 90 34 56 22
0 4 7 3 6 8 98
4 10 20 23 46 50 69 88 99
0 3 12 45 50 77 88 99
0 20 46 77 98
0 50
2 99
10 40
1 2 3 4 99 0 12
3 4 2 0 12 99
2 2
10 5
0 1 2
1 2
3 2
100 5 3
0 1 2
1 2
1 2
3 2
100 5 3
0 1 2
0 1
1 2
2 90
1 10
0 80
80 90
Code: Select all
449
417
10
IMPOSSIBLE
1671
2826
990
20
165
68
240
Code: Select all
3 30
100 100 1
0 2 4 5 6 7 8 21 22 23 24 25 26 30
1 2 11 12 13 14 15 16 19 30
1 10 30
2 99
100 1
0 1 98 99
1 98
3 1
100 10 100
0 1
0 1
0 1
2 5
1 1
0 3
4 5
4 89
7 2 4 8
3 34 45 56 77
4 23 34 89
0 99
3 99
5 99
12 90 34 56 22
0 3 4 6 7 8 98
4 10 20 23 46 50 69 88 99
0 3 12 45 50 77 88 99
0 20 46 77 98
0 50
2 99
10 40
0 1 2 3 4 12 99
0 2 3 4 12 99
2 2
10 5
0 1 2
1 2
3 2
100 5 3
0 1 2
1 2
1 2
3 2
100 5 3
0 1 2
0 1
1 2
2 90
1 10
0 80
80 90
Code: Select all
449
417
10
IMPOSSIBLE
1671
2826
990
20
163
68
240
What's the compiler error you're getting?hpjhc wrote:What's wrong with my code, why complile error?
Code: Select all
#include <iostream>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <cstdio>
#include <stack>
#include <utility>
#include <cmath>
#include <sstream>
using namespace std;
typedef pair<int, int> ii;
typedef pair<int, ii> iii;
const int MAXN = 100;
int elevatorCost[6];
vector<int> floorsForElevator[6];
int N, K;
vector<iii> G[MAXN];
int dist[MAXN];
vector<int> answers;
void read()
{
memset(dist, 127, sizeof dist);
for(int i = 0; i < MAXN; ++i) G[i].clear();
for(int i = 0; i < 6; ++i) floorsForElevator[i].clear();
//all set
for(int i = 0; i < N; ++i)
{
cin >> elevatorCost[i];
}
string emptyStr;
getline(cin, emptyStr);
for(int i = 0; i < N; ++i)
{
string line;
getline(cin, line);
istringstream iss(line);
int floor;
while(iss >> floor)
{
floorsForElevator[i].push_back(floor);
}
}
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < floorsForElevator[i].size(); ++j)
{
for(int k = j+1; k < floorsForElevator[i].size(); ++k)
{
int f1 = floorsForElevator[i][j];
int f2 = floorsForElevator[i][k];
int cost = elevatorCost[i]*(abs(f1-f2));
G[f1].push_back(iii(cost, ii(f2, i)));
G[f2].push_back(iii(cost, ii(f1, i)));
}
}
}
//now run Dijkstra
priority_queue<iii> Q;
Q.push(iii(0, ii(0, -1)));
dist[0] = 0;
while(!Q.empty())
{
iii triple = Q.top(); Q.pop();
int current = triple.second.first;
int currentElevator = triple.second.second;
for(int i = 0; i < G[current].size(); ++i)
{
int child = G[current][i].second.first;
int childElevator = G[current][i].second.second;
int cost = G[current][i].first;
if(currentElevator != childElevator && currentElevator != -1) cost += 60;
if(dist[current] + cost <= dist[child])
{
dist[child] = dist[current] + cost;
Q.push(iii(-dist[child], ii(child, childElevator)));
}
}
}
if(dist[K] > (1 << 20)) answers.push_back(-1);
else answers.push_back(dist[K]);
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
while(cin >> N)
{
cin >> K;
read();
}
for(int i = 0; i < answers.size(); ++i)
{
//cout<<"CASE: "<<i<<endl;
if(answers[i] == -1) cout<<"IMPOSSIBLE";
else cout<<answers[i];
cout<<'\n';
}
return 0;
}
Code: Select all
2 99
100 1
0 1 98 99
1 98
Code: Select all
2 99
10 40
1 2 3 4 99 0 12
3 4 2 0 12 99
Code: Select all
IMPOSSIBLE