• POJ 3662(最短路,二分


    交了10多次,后来把二分的下界l从0改成-1就AC。。。。。无法理解啊。。。。。。。。。。。。

    PS:想通了。。。本来脑残想成只有N为0的时候才能dij才能取到0,但是因为能免费去边所以。。。下界必须取-1才能让上界可以取到0。。。真是脑残了。。。。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<utility>
    #include<vector>
    #include<cstring>
    #define INF 0x3fffffff
    #define pb push_back
    #define pn(x) cerr<<x<<endl
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> node;
    int N,P,K;
    const int maxv=1005;
    struct edge{
        int to,w;
    };
    vector<edge> G[maxv];
    vector<edge> G2[maxv];
    int dis[maxv];
    bool dij(int m){ 
        for(int i=1;i<=N;i++)
            for(int j=0;j<G[i].size();j++){
                if(G[i][j].w<=m) G2[i][j].w=0;
                else G2[i][j].w=1;
            }
        memset(dis,0x3f,sizeof dis);
        dis[1]=0;
        priority_queue<node,vector<node>,greater<node> > Q;
        Q.push((node){dis[1],1});
        while(!Q.empty()){
            node now=Q.top();
            Q.pop();
            int u=now.second;
            if(dis[u]<now.first) continue;
            for(int i=0;i<G2[u].size();i++){
                int v=G2[u][i].to;
                if(dis[u]+G2[u][i].w<dis[v]){
                    dis[v]=dis[u]+G2[u][i].w;
                    Q.push((node){dis[v],v});
                }
            }
        }
        return dis[N]<=K;
    }
    int main(){
        freopen("in.txt","r",stdin);
        cin>>N>>P>>K;
        int t1,t2,t3;
        for(int i=0;i<P;i++){
            scanf("%d%d%d",&t1,&t2,&t3);
            G[t1].pb((edge){t2,t3});
            G2[t1].pb((edge){t2,t3});
            G[t2].pb((edge){t1,t3});
            G2[t2].pb((edge){t1,t3});
        }
        if(N==1){
            cout<<0<<endl;
            return 0;
        }
        int l=-1,r=1000006;
        while(r-l>1){
            int mid=(r+l)>>1;
            if(dij(mid)) r=mid;
            else l=mid;
        }
        if(!dij(r)) cout<<-1<<endl;
        else
        cout<<r<<endl;
        return 0;
    }
  • 相关阅读:
    简单分页案例
    layer弹出层
    layDate 日期与时间组件 入门
    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":解决方案
    eclipse常用快捷键
    javascript DOM编程艺术(第2版)
    webstorm破解
    Intellij IDEA搭建vue-cli项目
    颜色rgba、hsla
    文本阴影、换行、溢出
  • 原文地址:https://www.cnblogs.com/Cw-trip/p/4472275.html
Copyright © 2020-2023  润新知