YbtOj練習 二分5 飛離地球

2022-05-08 15:48:12 字數 1372 閱讀 9635

除看這道題,以為就是很簡單的二分+判斷負環

但是數次0分告訴我哪有你想的那麼簡單

我們在求最短路的過程中,應該把那些不同時滿足1.與起點聯通2.與終點聯通的點刪除。  一旦我們把這些點考慮進去,且這些點上還有負環時,對答案的影響就是致命的。

比如說這種情況

而如果終點不滿足上述條件,我們就可以直接輸出-1了。

#includeusing

namespace

std;

const

int n=105,m=10005,inf=0x3f3f3f3f

;int

h[n],e[m],ne[m],w[m];

inttot,n,m,t,dis[n];

bool vis[n],useful[n];//

useful表示是否同時滿足兩個約束條件

inline int

read()

while(ch>='

0'&&ch<='9'

)

return x*f;

}inline

void add(int a,int b,int

c)inline

void dfs(intx)}

inline

bool judge(int now,int x) //

判斷負環

}vis[now]=0

;

return

false;}

inline

void spfa(int

x) }

}}inline

bool check(int

x) spfa(x);

if(dis[n]>=0&&dis[n]<=inf) return

true

;

return

false;}

intmain()

memset(vis,

0,sizeof

(vis));

dfs(1);

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

if(vis[i]) useful[i]=1

;

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

if(useful[i])

if(!useful[n]) //

特判

while(l

printf(

"%d\n

",ans);

}return0;

}

ybtoj 二分演算法 最小時間

有n個物品,第i個物品有兩個屬性k,b,表示它在時刻 的價值為k x b。當前處於時刻0,你可以選擇不超過m個物品,使得存在非負整數時刻t,你選擇的所有物品的總價值大於等於s。給出s,求t的最小值。第一行三個整數n,m,s。接下來n行,第i行兩個整數k,b。一行乙個整數表示答案。3 2 100 3 ...

YbtOJ高效高階 二分 3 最大均值

ybtoj高效高階 二分 3 給定正整數序列a 求乙個平均數最大的,長度不小於 l 的 連續的 子段。10 66 4 21038 59 416500顯然二分 那要不然為啥是二分練習題呢 我們二分出這個平均值 然後把數列中每個數都減去這個平均值 然後找是否有一段長度不小於l的且和不為負數的數段即可 i...

sdut 二分練習

problem description 給你乙個序列,然後給你m個元素,讓你從序列中找出與每個元素最接近的數字輸出來,如果有兩個就輸出兩個。input 多組輸入,第一行給你兩個數n 0 n 10000000 m 0 m n 接下來是數列的n個數,然後再輸入m個元素,讓你找出最接近每個元素的值。如果有...