반응형
#include<fstream>
#include <algorithm>
#include<vector>
using namespace std;
ifstream fin ("phoneline.in");
ofstream fout ("phoneline.out");
const int MAX = 1000 + 5;
vector <int> a[MAX], b[MAX];
int e[MAX * 10];
bool mark[MAX];
int dis [MAX], saf[MAX], head, tail;
int n, k, D, M;
void dfs (int u) {
dis[u] = D;
mark[u] = true;
saf[tail++] = u;
for (int i = 0; i < a[u].size (); i++) {
if (!mark[a[u][i]] && b[u][i] <= M)
dfs (a[u][i]);
}
}
void Bfs (int MM) {
M = MM;
memset (mark, 0, sizeof mark);
head = tail = 0;
D = 0;
dfs (n - 1);
while (head < tail) {
int k = saf[head++];
for (int i = 0; i < a[k].size (); ++i) {
if (!mark[a[k][i]]) {
D = dis[k] + 1;
dfs (a[k][i]);
}
}
}
}
void bs (int x, int y)
{
if (y == x + 1) {
fout << e[y] << endl;
exit (0);
}
int mid = (y + x) / 2;
Bfs(e[mid]);
if (dis[0] <= k)
bs(x, mid);
else
bs(mid, y);
}
int main() {
int ee;
int u, v, w, i;
fin >> n >> ee >> k;
for (i = 0; i < ee; ++i)
{
fin >> u >> v >> w;
u--;
v--;
a[u].push_back(v);
b[u].push_back(w);
a[v].push_back(u);
b[v].push_back(w);
e[i + 1] = w;
}
sort (e, e + 1 + ee);
Bfs (0);
if (!mark[0]) {
fout << "-1" << endl;
return 0;
}
if (dis[0] <= k) {
fout << "0" << endl;
return 0;
}
bs (0, ee);
return 0;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
백준 10828 - 스택이란? (0) | 2023.09.07 |
---|---|
백준 1260 - dfs와 bfs - 비재귀(스택 큐사용) (1) | 2022.10.11 |
백준 1182번 부분수열의 합 소스 코드 - 비트마스크 (0) | 2022.01.06 |
백준 2531번 회전초밥 소스 코드 (0) | 2022.01.06 |
백준 2805번 - 나무 자르기 (0) | 2021.12.17 |