水題日常 Luogu1462 通往奧格瑞瑪的道路

2022-05-19 02:14:20 字數 1449 閱讀 7623

qwq馬上高二啦不能頹啦…知乎上聽說寫部落格的效果挺好的,來試一下好啦~

題目鏈結<<

在艾澤拉斯,有n個城市。編號為1,2,3,...,n。

城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進而損失一定的血量。

每次經過乙個城市,都會被收取一定的過路費(包括起點和終點)。路上並沒有收費站。

假設1為暴風城,n為奧格瑞瑪,而他的血量最多為b,出發時他的血量是滿的。

歪嘴哦不希望花很多錢,他想知道,在可以到達奧格瑞瑪的情況下,他所經過的所有城市中最多的一次收取的費用的最小值是多少。

orz一開始就像其中乙個題解一樣直接跑兩遍spfa,然後是wa掉了乙個點(後來看了看題解發現這種方法是錯誤的(不過居然才wa了乙個點…

好叭我最後還是老老實實寫了二分(然而這裡我又智障了沒開long long結果wa了好多次還沒發現…)

嗯那麼做法就是先跑一邊最短路spfa,看一下這種情況下能否到達終點,不能的話直接輸出afk(_(:з」∠)_話說為啥是afk?)

然後如果可以的話就給f排個序對f進行二分,如果當前的值太小的話就往大的找否則往小的找(qwq哦千萬不能像我一樣一開始還把邊集陣列開小了…

最後貼上長得不太好看的**x(**:喵喵喵?

#include#include

#include

#include

using

namespace

std;

const

int inf=0x7f7f7f7f

; const

int m=100005

;const

int n=10005

;struct edgeedges[m];

inthead[n],cnt;

int n,m,b,l,r,ans;long

long

dis[n];

intf[n],temp[n];

queue

q;bool

inq[n];

inline

void addedge(int u,int v,intw);

head[u]=cnt;

}inline

intread()

while(c>='

0'&&c<='9')

return s*f;

}inline

bool spfa(ints) }}

}if(dis[n]>=b||dis[n]==dis[0])return0;

return1;

}int

main()

if(!spfa(inf))printf("

afk"

);

else

printf("%d

",ans);

}return0;

}

view ugly code =w=

luogu1462 通往奧格瑞瑪的道路

給出乙個有邊權和點權的無向圖,規定路徑長度為路徑經過的邊權和。求出這麼一條從起點到終點的路徑,它的長度小於等於給出的長度限制 條件1 且經過的點權最大的點的點權是所有滿足條件1的路徑中的最小的。圖論題我沒怎麼接觸過需要用到反演思想的,然而這道題就是。我們發現這個圖有這麼乙個單調性 選的點數越多,子圖...

洛谷1462 通往奧格瑞瑪的道路

洛谷1462 通往奧格瑞瑪的道路 題目背景 在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 題目描述 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著...

P1462 通往奧格瑞瑪的道路

在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進...