原题是用二分
我在想能不能用dfs做
#include <iostream>
using namespace std;
int total_area;
int total_road;
int start, target;
int degree[(int)1e4 + 100][(int)1e4 + 100];
int min_degree;
int degree_now;
void dfs(int start_point)
{
if (start_point == target)
{
min_degree = min(min_degree, degree_now);
return;
}
if (start_point > target)
{
return;
}
for (int i = start_point + 1; i <= total_area; i++)
{
int past = degree_now;
degree_now = max(degree_now, degree[start_point][i]);
dfs(i);
degree_now = past;
}
}
int main()
{
cin >> total_area >> total_road;
cin >> start >> target;
for (int i = 1; i <= total_road; i++)
{
int bind_1, bind_2;
cin >> bind_1 >> bind_2;
int body = 0;
cin >> body;
if (degree[bind_1][bind_2] != 0 && body < degree[bind_1][bind_2])
{
degree[bind_1][bind_2] = body;
degree[bind_2][bind_1] = body;
}
else if (degree[bind_1][bind_2] == 0)
{
degree[bind_1][bind_2] = body;
degree[bind_2][bind_1] = body;
}
}
dfs(start);
cout << min_degree;
return 0;
}