zoukankan      html  css  js  c++  java
  • 洛谷1462 通往奥格瑞玛的道路 最短路&&二分

    SPFA和二分的使用

    跑一下最短路看看能不能回到奥格瑞玛,二分收费最多的点

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    #define maxn 10005
    #define maxm 50005
    #define inf 2000000000
    
    int n,m,b,cnt,ans;
    int c[maxn],dis[maxn];
    int head[maxm];
    bool vis[maxn];
    struct edge{
        int next,to,w;
    }e[maxm<<1];
    void insert(int u,int v,int k){
        cnt++;
        e[cnt].next=head[u];e[cnt].to=v;e[cnt].w=k;
        head[u]=cnt;
    }
    bool spfa(int x){
        queue<int> q;
        memset(vis,0,sizeof vis);
        memset(dis,0x3f,sizeof dis);
        vis[1]=1;dis[1]=0;
        q.push(1);
        while(!q.empty()){
            int now=q.front();
            q.pop();vis[now]=0;
            for(int i=head[now];i;i=e[i].next){
                int k=e[i].to;
                if(c[k]>x)continue;
                if(dis[k]>dis[now]+e[i].w){
                    dis[k]=dis[now]+e[i].w;
                    if(!vis[k]){
                        vis[k]=1;
                        q.push(k);
                    }
                }
            }
        }
        if(b-dis[n]<=0||dis[n]==inf)return 0;
        return 1;
    }
    int main(){
        int l=0,r=0;
        scanf("%d%d%d",&n,&m,&b);
        for(int i=1;i<=n;i++){
            scanf("%d",&c[i]);
            r=max(r,c[i]);
        }
        int u,v,k;
        for(int i=1;i<=m;i++){
            scanf("%d%d%d",&u,&v,&k);
            insert(u,v,k);
            insert(v,u,k);
        }
        if(spfa(inf)){
            int mid=(l+r)>>1;
            while(l<=r){
                if(spfa(mid)){
                    r=mid-1;
                    ans=mid;
                }
                else l=mid+1;
            mid=(l+r)>>1;
            }
        printf("%d
    ",ans);
        }
        else printf("AFK
    ");
        return 0;
    }
    View Code
  • 相关阅读:
    007 连接
    006 group by having
    005 运算null 排序 模糊查询 聚合函数
    004 列、distinct、between、in、null
    003 约束和关系
    002 表的概念操作
    5-04用Sql语句创建表
    5-03使用视图创建表
    5-01表达基本概念
    4-04数据库的备份与还原
  • 原文地址:https://www.cnblogs.com/Elfish/p/7610097.html
Copyright © 2011-2022 走看看