單調性:對於要求的所經過的所有城市中最多的一次收取的費用的最小值越小,滿足條件的道路就越少。
所以,我們二分經過的所有城市中收取的費用的最大值
但check函式怎麼寫呢?
我們以經過的邊所扣的血量為邊權,1為源點跑一邊最短路。在最短路過程中用於鬆弛dis陣列的邊的終點的點權必須
如果跑出的
#include#include#include#include#define ri register int
using namespace std;
const int maxn=100020,inf=(int)2e9+1;
int n,m,f[maxn],u[maxn],v[maxn],fst[maxn],nxt[maxn],l,r,mid;
long long b,w[maxn],dis[maxn];
//邊權較大,注意開long long,同時放大inf的取值。
bool book[maxn];
inline int read()
bool dijkstra(int minn)//check函式,minn為當前要判定的答案
); while(!q.empty())
); }
} if(dis[n]>=b) return 0;//判斷在當前限制下是否存在合法路徑使術士能活著到達點n
return 1;
}int main()
m <<=1;
for(ri i=1;i<=m;i+=2)
while(l+1>1;
if(dijkstra(mid)) r=mid;
else l=mid;
//mid合法:r=mid,否則l=mid。
} for(ri i=l;i<=r;i++)
if(dijkstra(i))
cout<
return 0;
}
P1462 通往奧格瑞瑪的道路
在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進...
P1462 通往奧格瑞瑪的道路
題目背景 在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 題目描述 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,...
P1462 通往奧格瑞瑪的道路
在艾澤拉斯大陸上有一位名叫歪嘴哦的神奇術士,他是部落的中堅力量 有一天他醒來後發現自己居然到了聯盟的主城暴風城 在被眾多聯盟的士兵攻擊後,他決定逃回自己的家鄉奧格瑞瑪 在艾澤拉斯,有n個城市。編號為1,2,3,n。城市之間有m條雙向的公路,連線著兩個城市,從某個城市到另乙個城市,會遭到聯盟的攻擊,進...