眾所周知,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 ...