hdu 4179 有限制的最短路)

2021-06-22 05:40:42 字數 1500 閱讀 8070

思路:不知道怎麼回事,wa了n多次,然後不知道怎麼回事就過了==,還是簡單的說一下思路吧:一次以起點為源點跑一遍spfa,然後以終點為起點跑一次spfa,這樣我們就可以列舉difficult為maxdist的邊了,設該邊的端點為x,y,於是有ans=min(ans,dist1[x]+get_dist(x,y)+dist2[y])。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9 typedef pairpair;

10#define maxn 44444

11#define inf 1e16

12double

dist1[maxn],dist2[maxn];

13bool

mark[maxn];

14struct

edge

18 edge(int _v,double

_w)21

};22 vectormap1[maxn],map2[maxn];

23 vectorvet;

24struct

pointpoint[maxn];

2728

struct

nodenode[maxn];

31int

n,m,st,ed,maxdist;

3233

double get_dist(int vs,int

vt)39

40int get(int vs,int

vt)47

return0;

48}4950

void spfa(int st,vectormap,double

dist)

5167}68

}69}70

}717273

intmain()74;

78vet.clear();

79for(int i=1;i<=n;i++)

82for(int i=1;i<=m;i++)

85 scanf("

%d%d%d

",&st,&ed,&maxdist);

86for(int i=1;i<=m;i++)

94if(d2<=maxdist)

98if(d1==maxdist)

102if(d2==maxdist)

106}

107spfa(st,map1,dist1);

108spfa(ed,map2,dist2);

109double ans=inf;

110for(int i=0;i2

)115

if(ans

118 puts("

none");

119}

120return0;

121 }

view code

poj 1062 有限制的最短路

思路 要求對於最短路上的點,不能出現等級之差大於m,於是我們可以列舉,假設酋長的等級為level,於是這個區間範圍 level m,level level m i,level i level,level m 都是可行的,對於列舉的每個區間範圍,做一次spfa即可,最終結果取最小值即可。1 inclu...

POJ 1062 有限制的最短路

題目鏈結 題意 n個人每人有乙個物品,每個物品可以直接買,也可以通過其他物品抵押加上少量的錢買,每個人有乙個等級,經過若干次交換購買的人中的最大等級差不能超過m。求要得到第一件物品的最少花費是多少?思路 如果沒有等級約束就是乙個最短路的模板題,根據a物品加w個金幣換到b物品,可以建立一條有向邊a b...

hdu2962 限制最短路 列舉

題意 n個點m條邊,每條邊有兩個權,乙個是路的長度,乙個是路限制了貨車運輸的高度。最後一行給出起點,終點,和這部車子可以運輸貨物放的最大的高度。思路 這裡的列舉限制高度,可以過,高度從大列舉到小,可以過600ms 如果二分的話更快。include include include include in...