西安邀請賽 M(二分 bfs)

2022-08-21 18:54:09 字數 1019 閱讀 1141

題意:n個點(<=1e5),m條邊(n-1<=m<=1e5),飛船最開始每次能走長度為0的邊,可以走0次。每公升級一次花費c,一次可以走的長度+d,可以走的次數+e。問最少花費多少能從1走到n。

思路:這道題比賽時讀錯題,導致沒有花很多時間在這道題。其實這題讀懂題後還是比較好做的。要求最少花費,顯然最小花費屬於[1,1e5],所以容易想到二分搜尋答案。然後用bfs得到買m次後經過多少邊能從1到n,不能到達則返回0x3f3f3f3f3f3f3f3f。要注意的是資料範圍,會炸int,wa了很多發qaq。其實不太明白這題-1的情況,因為題目說了圖是連通的,那麼你總可以通過購買足夠的次數來公升級,總能到達。但出題人沒反應,就判斷一下如果結果超出查詢範圍,也就是圖不連通的情況,輸出-1。

ac**:

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=1e5+5

;struct

node1a[maxn

<<1

];struct

node2tmp;

inthead[maxn],vis[maxn];

intn,m,c,d,e,cnt;

void add(int u,int v,int

w)ll bfs(

intnum)}}

return

0x3f3f3f3f3f3f3f3f;}

intmain()

int l=1,r=100000

,m;

while(l<=r)

if(l<=100000

) printf(

"%lld\n

",1ll*c*l);

else

printf(

"-1\n");

return0;

}

2019西安邀請賽M Travel(二分 最短路)

傳送門 題意也沒什麼說的,十分明朗,當時做的時候可能有點過於激動了,最後答案忘記了乘c。思路就是先二分公升級的次數,然後就知道了單次的最遠距離和次數,接著把邊權大於單次最遠距離的都砍掉,然後用bfs求一下最短路就ok了。include define int long long define maxn...

2017西安邀請賽總結

我記得前幾天就傳上來了的呀。邀請賽總結 前幾天玩的太浪了,還包了一次宿。休息就跟不上了,正式賽時候腦子一直濛濛的。而且之前想前一天去安排下戰術,然而熱身發揮的比較穩,再加上酒店問題比較大,換房間什麼的浪費很長時間就沒有去安排戰術,正式賽只做的4題,銅牌第6.發揮的很差,全場題總是不出。其實a題正解我...

2019西安邀請賽總結

打鐵了 上來a題我寫的時候過於緊張 以至於慢了好幾分鐘 然後開m 我覺得m就是二分加判斷 出賽場之後一交流確實沒錯,但是我判斷寫的dijistra也不知道 寫錯了 隊友一直在開l zc推錯了規律 最後cly重新按照題目寫了好幾個樣例最後a掉,其實就應該用雜湊儲存集合狀態然後打個表就可以,其實規律題也...