刚学图论,40ptsTLE求优化
  • 板块P1396 营救
  • 楼主asd890123
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/7/3 18:30
  • 上次更新2024/7/3 21:12:34
查看原帖
刚学图论,40ptsTLE求优化
1074084
asd890123楼主2024/7/3 18:30

我知道复杂度不对,但是不知道如何优化,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;
}
2024/7/3 18:30
加载中...