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#includeview ugly code =w=#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;
}
luogu1462 通往奧格瑞瑪的道路
給出乙個有邊權和點權的無向圖,規定路徑長度為路徑經過的邊權和。求出這麼一條從起點到終點的路徑,它的長度小於等於給出的長度限制 條件1 且經過的點權最大的點的點權是所有滿足條件1的路徑中的最小的。圖論題我沒怎麼接觸過需要用到反演思想的,然而這道題就是。我們發現這個圖有這麼乙個單調性 選的點數越多,子圖...
洛谷1462 通往奧格瑞瑪的道路
洛谷1462 通往奧格瑞瑪的道路 題目背景 在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 題目描述 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著...
P1462 通往奧格瑞瑪的道路
在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進...