結果
| 問題 |
No.1833 Subway Planning
|
| コンテスト | |
| ユーザー |
SSRS
|
| 提出日時 | 2022-02-04 21:49:54 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2,986 ms / 4,000 ms |
| コード長 | 2,362 bytes |
| コンパイル時間 | 2,699 ms |
| コンパイル使用メモリ | 209,148 KB |
| 最終ジャッジ日時 | 2025-01-27 18:57:22 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
int main(){
int N;
cin >> N;
vector<tuple<int, int, int>> E(N - 1);
vector<vector<int>> E2(N);
for (int i = 0; i < N - 1; i++){
int A, B, C;
cin >> A >> B >> C;
A--;
B--;
E[i] = make_tuple(C, A, B);
E2[A].push_back(B);
E2[B].push_back(A);
}
int tv = INF, fv = -1;
while (tv - fv > 1){
int mid = (tv + fv) / 2;
vector<bool> T(N, false);
int a = -1;
for (int i = 0; i < N - 1; i++){
if (get<0>(E[i]) > mid){
T[get<1>(E[i])] = true;
T[get<2>(E[i])] = true;
a = get<1>(E[i]);
}
}
if (a == -1){
tv = mid;
} else {
vector<int> d1(N, -1);
d1[a] = 0;
queue<int> Q1;
Q1.push(a);
int s;
while (!Q1.empty()){
int v = Q1.front();
Q1.pop();
if (T[v]){
s = v;
}
for (int w : E2[v]){
if (d1[w] == -1){
d1[w] = d1[v] + 1;
Q1.push(w);
}
}
}
vector<int> d2(N, -1);
d2[s] = 0;
queue<int> Q2;
Q2.push(s);
int t;
while (!Q2.empty()){
int v = Q2.front();
Q2.pop();
if (T[v]){
t = v;
}
for (int w : E2[v]){
if (d2[w] == -1){
d2[w] = d2[v] + 1;
Q2.push(w);
}
}
}
vector<int> d3(N, -1);
d3[t] = 0;
queue<int> Q3;
Q3.push(t);
while (!Q3.empty()){
int v = Q3.front();
Q3.pop();
for (int w : E2[v]){
if (d3[w] == -1){
d3[w] = d3[v] + 1;
Q3.push(w);
}
}
}
int D = d2[t];
bool ok = true;
for (int i = 0; i < N; i++){
if (T[i]){
if (d2[i] + d3[i] > D){
ok = false;
}
}
}
int mn = INF;
for (int i = 0; i < N - 1; i++){
int A = get<1>(E[i]);
int B = get<2>(E[i]);
if (d2[A] + d3[B] == D - 1 || d2[B] + d3[A] == D - 1){
mn = min(mn, get<0>(E[i]));
}
}
for (int i = 0; i < N - 1; i++){
if (get<0>(E[i]) - mn > mid){
ok = false;
}
}
if (ok){
tv = mid;
} else {
fv = mid;
}
}
}
cout << tv << endl;
}
SSRS