zoukankan      html  css  js  c++  java
  • bzoj2662 [BeiJing wc2012]冻结 ——分层图

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2662

    分层图;

    我也不知道我写的是不是 bfs (dijkstra?)。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    int n,m,k,head[55],ct,dis[55][55];
    bool vis[55][55];
    struct N{
        int to,next,w;
        N(int t=0,int n=0,int w=0):to(t),next(n),w(w) {}
    }edge[2005];
    struct P{
        int d,f,bh;
        P(int d=0,int f=0,int b=0):d(d),f(f),bh(b) {}
        bool operator < (const P &y) const 
        {
            return d>y.d;//priority_queue 是从大到小排序 
        }
    };
    priority_queue<P>q;
    void add(int x,int y,int z){edge[++ct]=N(y,head[x],z); head[x]=ct;}
    void bfs()
    {
        memset(dis,0x3f,sizeof dis);
        dis[1][0]=0; q.push(P(0,0,1));
        while(q.size())
        {
            int x=q.top().bh,d=q.top().d,f=q.top().f; q.pop();
            if(vis[x][f])continue;
            vis[x][f]=1;
            if(x==n)
            {
                printf("%d",d);
                return;
            }
            for(int i=head[x];i;i=edge[i].next)
            {
                int u=edge[i].to;
                if(f<k&&!vis[u][f+1]&&dis[u][f+1]>d+edge[i].w/2)
                {
                    dis[u][f+1]=d+edge[i].w/2;
                    q.push(P(dis[u][f+1],f+1,u));
                }
                if(dis[u][f]>d+edge[i].w&&!vis[u][f])
                {
                    dis[u][f]=d+edge[i].w;
                    q.push(P(dis[u][f],f,u));
                }
            }
        }
    }
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1,x,y,z;i<=m;i++)
        {
            scanf("%d%d%d",&x,&y,&z);
            add(x,y,z); add(y,x,z);
        }
        bfs();
        return 0;
    }
  • 相关阅读:
    Exercise02_09
    Exercise02_05
    Exercise02_01
    Exercise02_03
    Exercise02_07
    web.xml配置详解
    面对不成功的人生
    请不以结婚为目的的恋爱吧
    年轻人能为世界做点什么
    不作就不会活
  • 原文地址:https://www.cnblogs.com/Zinn/p/9270395.html
Copyright © 2011-2022 走看看