POJ 1062 最短路 dijskra 列舉

2021-06-21 09:58:42 字數 1245 閱讀 3213

zwj 推薦的一道最短路神題

等級限制這個條件可以列舉所有符合條件的區間的點,從最高點到酋長的等級。

然後就是求最短路了。算是 dijstra 的模板吧。

#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define read freopen("acm.in","r",stdin)

#define write freopen("acm.out","w",stdout)

#define ll long long

#define ull unsigned long long

#define uint unsigned int

#define pii pair#define pdd pair#define fst first

#define sec second

#define ms(x,d) memset(x,d,sizeof(x))

#define inf 1000001000

#define all(x) x.begin(),x.end()

#define pb push_back

#define mod 99991

#define max 11111

struct node

;vectorg[1000];

int price[1000];

int level[1000];

vectorgl[1000];

vectorre[1000];

int m,n;

int lm;

int dijskra()}}

return dist[1];

}int solve()

{ int maxl=-1;

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

maxl=max(level[i],maxl);

maxl=min(lm+m,maxl);

int ans=inf;

for(int l=maxl;l>=lm;l--)// 列舉區間最高等級 從最高可到等級到酋長

{ms(g,0);

for(int tl=l;tl>=0&&abs(tl-l)<=m;tl--)//列舉在區間中的物品

{for(int k=0;k

昂貴的聘禮 poj 1062 最短路

沒看好題目條件 隨便寫了個弗洛伊德就交了 實際上兩個身份差距大的人是連間接交易都不允許的 所以列舉每個等級區間並對其用dijkstra演算法找最小值 ac include include include include include include include include include ...

poj 1062 有限制的最短路

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

POJ 1062 昂貴的聘禮 最短路

假設乙個起點0,根據題目給出的權值構圖,答案就是從0到1之間的最短路。這裡要注意的是這個等級限制的問題。首先等級限制不是相鄰點之間的限制,而是整體路徑的。等級的限制可以通過假設乙個點為最低點求最短路,我假設某個點是最短路中等級最低的,然後求最短路。每列舉乙個點就求一次最短路,取最小的值。因為你列舉的...