BOJ 10217 - KCM Travel
時間制限メモリ制限解答を提出正解正解正解正解率10秒256 MB 9832202298517.302%
質問する
努力の末、燦民はついに2014年のGoogle Code Jam World Finalsに入った.グーグルからの招待状をもらって嬉しかったのは、よく読んだミンも重要な事実に気づいたことだ.最近の勢いのおかげで、グーグルも大企業のように費用削減に熱中している.
招待状の内容によると、グーグルは賛民に最大M元の旅行費用を支払う.仁川(インチョン)でLAへの直行便を1回中断するのはそんなに難しいのかという質問だが、これからの決勝戦を考えると、大会の外に気を使いたくないのも事実だ.このため、賛民は仁川(インチョン)からLAまでのMウォン以下で最も早く行ける道を2番目に選ぶことにした.
各空港間で運賃と移動時間を提供する際、仁川からLAまでの最速路線を見つけ、チャンミンの大会参加を支援する.
入力
入力ファイルの最初の行には、テストケース数を表す自然数Tが与えられる.そしてT個のテストケースです.
各試験例の第1行において、空港の数N(2≦N≦100)、総サポート費用M(0≦M≦10000)、チケット情報の数K(0≦K≦10000)が空白に分割される.次に、K行において、チケット毎の出発空港u、到着空港v(1≦u,v≦N,u≠v)、料金c(1≦c≦M,整数)、および所要時間d(1≦d≦1000)を空白に分割する.仁川は永遠に1番都市で、ロサンゼルスは永遠にN番都市です
しゅつりょく
各テストボックスの1行には、賛民がLAに到着するのに要する最短時間が印刷されます.
LAに到着できない場合は「Poor KCM」を出力します.
に近づく
これは一般的な多益アルゴリズムにおいて,コストと時間のDP感覚が増大するという問題である.
dist[N][M]のテーブルを作成して実装を開始した.
コメントをうまく処理すれば簡単に解決できる問題です.
に答える
優先キューに格納し、演算子()で処理する構造体ノードが作成されました.
最短時間のノードを抜く限り、挿入時にMを超えないでください.
挿入中に<=を<と書いて10分以上飛びました.ミスを減らそう
質問する
努力の末、燦民はついに2014年のGoogle Code Jam World Finalsに入った.グーグルからの招待状をもらって嬉しかったのは、よく読んだミンも重要な事実に気づいたことだ.最近の勢いのおかげで、グーグルも大企業のように費用削減に熱中している.
招待状の内容によると、グーグルは賛民に最大M元の旅行費用を支払う.仁川(インチョン)でLAへの直行便を1回中断するのはそんなに難しいのかという質問だが、これからの決勝戦を考えると、大会の外に気を使いたくないのも事実だ.このため、賛民は仁川(インチョン)からLAまでのMウォン以下で最も早く行ける道を2番目に選ぶことにした.
各空港間で運賃と移動時間を提供する際、仁川からLAまでの最速路線を見つけ、チャンミンの大会参加を支援する.
入力
入力ファイルの最初の行には、テストケース数を表す自然数Tが与えられる.そしてT個のテストケースです.
各試験例の第1行において、空港の数N(2≦N≦100)、総サポート費用M(0≦M≦10000)、チケット情報の数K(0≦K≦10000)が空白に分割される.次に、K行において、チケット毎の出発空港u、到着空港v(1≦u,v≦N,u≠v)、料金c(1≦c≦M,整数)、および所要時間d(1≦d≦1000)を空白に分割する.仁川は永遠に1番都市で、ロサンゼルスは永遠にN番都市です
しゅつりょく
各テストボックスの1行には、賛民がLAに到着するのに要する最短時間が印刷されます.
LAに到着できない場合は「Poor KCM」を出力します.
に近づく
これは一般的な多益アルゴリズムにおいて,コストと時間のDP感覚が増大するという問題である.
dist[N][M]のテーブルを作成して実装を開始した.
コメントをうまく処理すれば簡単に解決できる問題です.
に答える
優先キューに格納し、演算子()で処理する構造体ノードが作成されました.
最短時間のノードを抜く限り、挿入時にMを超えないでください.
挿入中に<=を<と書いて10分以上飛びました.ミスを減らそう
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define FUP(i, a, b) for(int i = a; i <= b; i++)
#define FDOWN(i, a, b) for(int i = a; i >= b; i--)
#define MS(a, b) memset(a, b, sizeof(a))
#define ALL(v) v.begin(), v.end()
#define CIN(a) cin >> a;
#define CIN2(a, b) cin >> a >> b
#define CIN3(a, b, c) cin >> a >> b >> c
#define COUT(a) cout << a
#define COUT2(a, b) cout << a << ' ' << b
#define COUT3(a, b, c) cout << a << ' ' << b << ' ' << c
#define ENDL cout << '\n'
int dy[4] = { -1, 1, 0, 0 };
int dx[4] = { 0, 0, 1, -1 };
struct Node
{
int v, c, d;
Node(int vv, int cc, int dd) : v(vv), c(cc), d(dd) {}
};
struct compare
{
bool operator()(Node A, Node B)
{
return A.d > B.d;
}
};
int T, N, M, K, u, v, c, d;
int dist[101][10001]; // i까지 j원으로 도착할때 최소시간
vector<Node> edge[101];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
CIN(T);
while (T--)
{
CIN3(N, M, K);
FUP(i, 1, N)
{
edge[i].clear();
FUP(j, 0, M)
{
dist[i][j] = INT_MAX;
}
}
while (K--)
{
CIN2(u, v);
CIN2(c, d);
edge[u].push_back(Node(v, c, d));
}
priority_queue<Node, vector<Node>, compare> pq;
dist[1][0] = 0;
pq.push(Node(1, 0, 0));
string answer = "Poor KCM";
while (!pq.empty())
{
Node node = pq.top();
if (node.v == N)
{
answer = to_string(node.d);
break;
}
pq.pop();
if (dist[node.v][node.c] < node.d) continue;
for (Node next : edge[node.v])
{
if (node.c + next.c > M || dist[next.v][node.c + next.c] <= node.d + next.d) continue;
dist[next.v][node.c + next.c] = node.d + next.d;
pq.push(Node(next.v, node.c + next.c, node.d + next.d));
}
}
COUT(answer);
ENDL;
}
return 0;
}
Reference
この問題について(BOJ 10217 - KCM Travel), 我々は、より多くの情報をここで見つけました https://velog.io/@gyuho/BOJ-10217-KCM-Travelテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol