• poj1797(dijstra变形,求最小边的最大值)


    题目链接:https://vjudge.net/problem/POJ-1797

    题意:n个点,m条带权边,求点1到点n的所有路径中最小边的最大值。

    思路:

    和poj2253一样,只不过那题n<=200,可以用floyd,而这题floyd会TLE,所以用dijkstra来做。

    提一下floyd的做法,用dp[i][j]表示i到j的所有路径中最小边的最大值,那么转移方程是: dp[i][j]=max(dp[i][j] , min(dp[i][k] , dp[k][j]) )

    dijkstra的做法也是一样的,修改dis数组的定义,即dis[i][j]表示i到j的路径中最小边的最大值,那么松弛操作就是:dis[j]=max(dis[j] , min(dis[i] , e[i][j]) )。优先队列采用降序队列,因为是求最大值,还有dis数组初始化-inf,dis[1]=inf。

    AC代码:

    #include<cstdio>
    #include<queue>
    #include<algorithm>
    using namespace std;
    
    const int maxn=1005;
    const int inf=0x3f3f3f3f;
    int T,n,m,cas,e[maxn][maxn],vis[maxn],dis[maxn];
    typedef pair<int,int> PII;
    priority_queue<PII> pq;
    
    void dijkstra(){
        int num=0;
        for(int i=1;i<=n;++i)
            vis[i]=0,dis[i]=-inf;
        dis[1]=inf;
        pq.push(make_pair(inf,1));
        while(!pq.empty()&&num<=n){
            int u=pq.top().second;
            pq.pop();
            if(vis[u]) continue;
            vis[u]=1;
            ++num;
            for(int i=1;i<=n;++i)
                if(e[u][i]!=-1&&!vis[i]){
                    dis[i]=max(dis[i],min(dis[u],e[u][i]));
                    pq.push(make_pair(dis[i],i));
                }
        }
    }
    
    int main(){
        scanf("%d",&T);
        while(T--){
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;++i)
                for(int j=1;j<=n;++j)
                    e[i][j]=-1;
            for(int i=1;i<=m;++i){
                int u,v,w;
                scanf("%d%d%d",&u,&v,&w);
                e[u][v]=e[v][u]=w;
            }
            dijkstra();
            printf("Scenario #%d:
    ",++cas);
            printf("%d
    
    ",dis[n]);
        }
        return 0;
    }
  • 相关阅读:
    大话设计模式--建造者模式 Builder -- C++实现实例
    HTTP状态码大全
    安装mongodb卡顿
    sublime_win配置
    sublime__最全面的 Sublime Text 使用指南
    sublime text 3搭建python 的ide
    spring boot与 spring.factories
    自定义xml spring bean
    统计分析: 跨库多表join
    java基础
  • 原文地址:https://www.cnblogs.com/FrankChen831X/p/11725615.html
Copyright © 2020-2023  润新知