CSL 的訓練計畫 二分 最短路

2021-09-14 06:33:07 字數 1319 閱讀 8941

眾所周知,csl 是乙個負責的集訓隊隊長。為了讓集訓隊的學弟們訓練更加飽和,他根據每個人的能力,提出了 m 個題數要求。假如 csl 認為 yiyi 比 xixi 強,那麼如果 xixi 做了 a 題,那 csl 會要求 yiyi 需要做至少 a+ri×ka+ri×k,其中 riri 是已知的常數。csl 現在一共有 s 道題目可以分給大家,因為 csl 馬上就要考os了,所以他不想再出其他題了,請問正整數 k 最大是多少。

第一行有三個整數 n, m, s,分別表示集訓隊的學弟數量,csl 的題數要求和 csl 的題目數量。
接下來 m 行,每行三個整數 xi,yi,rixi,yi,ri,含義題目描述中所述。

2≤n≤2⋅1052≤n≤2⋅105

1≤m≤6⋅1051≤m≤6⋅105

1≤s≤10121≤s≤1012

1≤xi,yi≤n1≤xi,yi≤n

0≤ri≤1060≤ri≤106

在一行輸出乙個整數表示 k 可取的最大值。特別地,如果題目不夠分則輸出 0;為無窮大輸出 -1。
示例1

複製

4 5 19

1 3 0

3 4 4

1 4 2

1 3 2

2 4 1

複製

2
示例2

複製

5 5 6

5 4 2

3 2 1

3 5 3

2 4 4

5 2 1

複製

0
題解:二分列舉答案,l 從1開始就可以了,因為不符合也是輸出0,r設為s,若s時也符合則k可以無窮大了

#includeusing namespace std;

typedef long long ll;

#define pb push_back

#define mk make_pair

const int n=2e5+10;

vector> v[n];

int n,m;

ll s,dp[n];

int in[n],vis[n];

bool judge(ll x)

} int now;

pairtmp;

// coutdp[tmp.first]=dp[now]+tmp.second*x;

// cout<>1;

if(judge(mid))

else r=mid-1;

} if(ans==s) ans=-1;

printf("%lld\n",ans);

return 0;

}

二分 最短路 dijkstra

洛谷p1462 通往奧格瑞瑪的道路 對於我這個只是聽過二分但是從來沒有寫過二分的人來說,看到這個題目時是懵逼的,啥是求最多一次收費的最小值,只能回頭開始學習二分,在一下幾種情況下,均可以用二分來解決。1.從有序陣列中查詢某個值。2.假定乙個解並判斷是否可行 3.最大化最小值 4.最大化平均值 這個題...

中石油訓練賽 小說 最短路 二分

題目大意 給出乙個無環無向圖,以及k,定義答案是點1到點n的任意一條路徑上,所經過的所有邊的權值中的第k大值,求答案的最小值。題目是中文題面,沒看懂大意可以直接去看原題目。題目分析 因為是要求權值中的最值,不是求最短路是多少,所以一開始想到的是最小生成樹,然後從大到小減去k個值,就是答案了,可惜的是...

CSL的訓練計畫 拓撲排序

題目保證了不會有環。一開始唯一能確定的乙個點便是入度為0的點,確定了乙個點自然而然可以推出其他點。a 1 r1 k a 1 r1 k r2 k a1 r1 k r 2 k r3 k su ma 1 r 1 k a 1 r 1 k r 2 k a 1 r 1 k r 2 k r 3 k sum a1 ...