zoukankan      html  css  js  c++  java
  • hdu6395 /// 优先队列dijkstra

    题目大意:

    给定无向图的n m为点数和边数

    接下来m行给定u v id表示点u到点v间有一条编号为id的边

    当由一条边走到另一条边 而两条边的编号不同时 费用+1

    优先队列跑dijkstra最短路 按费用排序

    #include <bits/stdc++.h>
    using namespace std;
    #define INF 0x3f3f3f3f
    #define LL long long
    #define mem(i,j) memset(i,j,sizeof(i))
    #define P pair<int,int>
    #define mp make_pair
    #define fir first
    #define sec second
    #define pb push_back
    const int N=1e5+5;
    
    int n,m;
    vector<P>G[N];
    struct NODE {
        int u,d,id,fa;
        bool operator <(const NODE& p)const {
            return d>p.d;
        }
    };
    int dis[N];
    
    void dijkstra() {
        priority_queue<NODE>q;
        while(!q.empty()) q.pop();
        q.push({1,0,0,-1}); dis[1]=0;
        while(!q.empty()) {
            NODE e=q.top(); q.pop();
            int u=e.u;
            if(u==n) break;
            for(int i=0;i<G[u].size();i++) {
                P t=G[u][i];
                int v=t.fir;
                if(u==v) continue;
                if(dis[v]>dis[u]+(t.sec!=e.id)) {
                    dis[v]=dis[u]+(t.sec!=e.id);
                    q.push({v,dis[v],t.sec,u});
                }
            }
        }
    }
    
    void init() {
        mem(dis,INF);
        for(int i=1;i<=n;i++) G[i].clear();
    }
    
    int main()
    {
        while(~scanf("%d%d",&n,&m)) {
            init();
            while(m--) {
                int u,v,id;
                scanf("%d%d%d",&u,&v,&id);
                G[u].pb(mp(v,id));
                G[v].pb(mp(u,id));
            }
            dijkstra();
            if(dis[n]==INF) printf("-1
    ");
            else printf("%d
    ",dis[n]);
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    iOS 小技巧总结
    iOS 字符串常用编码互相转换
    iOS点击cell查看大图,点击大图还原小图
    Cocoapods配置
    匈牙利匹配
    ISAP网络流
    BZOJ 3262--陌上花开
    android应用找回签名问题jarsigner
    android定位混淆过后的crash问题
    axios++:防止重复提交全局统一拦截
  • 原文地址:https://www.cnblogs.com/zquzjx/p/10358962.html
Copyright © 2011-2022 走看看