码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1975: [Sdoi2010]魔法猪学院

时间:2017-09-23 16:12:29      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:zoj   opera   printf   argc   als   二次   har   lis   log   

二次联通门 : BZOJ 1975: [Sdoi2010]魔法猪学院

 

 

 

 

/*
    BZOJ 1975: [Sdoi2010]魔法猪学院

    k短路
    统计一下在能量用完之前走了多少条到终点的路即可
*/
#include <cstdio>
#include <queue>
#include <iostream>
#include <cstring>
#define flo double 
#define rg register
#define Max 5010
#define INF 1e9
struct E { E *n; int v; flo d; } *Zlist[Max], *Flist[Max], poor[Max * 80], *Ta = poor;
int N, M; flo dis[Max], P; bool is[Max];
struct D 
{
    flo g; int id;
    bool operator < (const D &rhs) const 
    { return g + dis[id] > rhs.g + dis[rhs.id]; }
};
std :: queue <int> Q; std :: priority_queue <D> H;
inline void read (int &n)
{
    rg char c = getchar ();
    for (n = 0; !isdigit (c); c = getchar ());
    for (; isdigit (c); n = n * 10 + c - 0, c = getchar ());
}
int main (int argc, char *argv[])
{
    read (N), read (M); scanf ("%lf", &P); rg int i, j; int x, y; flo z;
    for (i = 1; i <= M; ++ i) 
    {
        read (x), read (y); scanf ("%lf", &z);
        ++ Ta, Ta->n = Zlist[x], Zlist[x] = Ta, Ta->v = y, Ta->d = z;
        ++ Ta, Ta->n = Flist[y], Flist[y] = Ta, Ta->v = x, Ta->d = z;
    }
    int n; E *e; int V;for (i = 1; i <= N; ++ i) dis[i] = INF;
    for (dis[N] = 0, is[N] = true, Q.push (N); !Q.empty (); Q.pop ())
        for (n = Q.front (), is[n] = false, e = Flist[n]; e; e = e->n)
            if (dis[(V = e->v)] > dis[n] + e->d)
            {
                dis[V] = dis[n] + e->d;
                if (!is[V]) is[V] = true, Q.push (V);
            }
    D r, _t; r.id = 1, r.g = 0; flo T = 0; int C = 0;
    for (H.push (r); !H.empty (); )
    {
        r = H.top (); H.pop ();
        if (r.id == N) { ++ C, T += r.g; if (T > P) break; };
        for (e = Zlist[r.id]; e; e = e->n)
            _t = r, _t.id = e->v, _t.g = r.g + e->d, H.push (_t);
    }
    printf ("%d", C - 1); return 0;
}

 

BZOJ 1975: [Sdoi2010]魔法猪学院

标签:zoj   opera   printf   argc   als   二次   har   lis   log   

原文地址:http://www.cnblogs.com/ZlycerQan/p/7581360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!