我知道复杂度不对,但是不知道如何优化,code:
#include <iostream>
#include <climits>
#include <vector>
#define debug(x) std::cout << #x << " = " << x << '\n'
const int N = 2e4 + 5;
struct edge{int to,cost;};
bool vis[N];
std::vector<edge> p[N];
int s,t,sum = 0,ans = INT_MAX;
void dfs(int x){
if (x == t){
ans = std::min(ans,sum);
return;
}
for (int i = 0;i < p[x].size();i++)
if (!vis[p[x][i].to]){
int tmp = sum;
vis[p[x][i].to]= true;
sum = std::max(sum,p[x][i].cost);
dfs(p[x][i].to);
sum = tmp;
vis[p[x][i].to] = false;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("P1396.in","r",stdin);
freopen("P1396.out","w",stdout);
#endif
std::cin.tie(0)->sync_with_stdio(0);
int n,m;
std::cin >> n >> m >> s >> t;
for (int i = 1;i <= m;i++){
int u,v,w;
std::cin >> u >> v >> w;
p[u].push_back((edge){v,w});
p[v].push_back((edge){u,w});
}
vis[s] = true;
dfs(s);
std::cout << ans << '\n';
return 0;
}