題目:
給出nn
個省,每個神有自己的折扣per
[i]p
er[i
],每個省有num
[i]n
um[i
]個城市。有m
m條路,每條路連線兩個城市u[i
]u[i
]和v[i
]v[i
],原價是w[i
]w[i
],但打折後的**就是(pe
r[u[
i](p
er[u
[i]所在城市]+p
er[v
[i]]
+per
[v[i
]所在城市])×
0.5])×
0.5。
如果要從ss到t
t的路程免費,那麼就得有打折後**在[l,
r][l
,r]區間之間的路免費通行。求在l
l最大的情況下且r
r盡量小的l,r
l,r。
可以二分ll和r
r。二分巢狀二分,第一重二分l
l,第二重二分rr。
每次二分完l
l之後,搜尋一遍能否只走**大於l
l的路到達終點,如果可以,就二分rr。
每次二分r
r之後,如果搜到可以只走**大於l
l且小於r
r的路線的話,那麼久將這一組答案記錄下來。
最終輸出記錄的答案即可。
#include
#include
#include
#define n 101000
using
namespace std;
int n,m,num,s,t,l1,r1,l2,r2,mid1,mid2,tot,l,r;
int u[n]
,v[n]
,pos[n]
,head[n]
;double w[n]
,per[n]
;bool ok,vis[n]
;struct edge
e[n*2]
;void
add(
int from,
int to,
double dis)
bool
dfs(
int x,
int l,
int r)
//搜尋是否有方法可以在限制條件下到達t
intmain()
}for
(int i=
1;i<=n;i++
)scanf
("%lf"
,&per[i]);
for(
int i=
1;i<=m;i++
)scanf
("%d%d"
,&s,
&t);
l1=0;
r1=15000
;while
(l1<=r1)
//二分l
else l2=mid2+1;
}if(ok) l1=mid1+1;
else r1=mid1-1;
}printf
("%d %d\n"
,l,r)
;return0;
}
JZOJ5771 遨遊 二分 DFS
題目 給出n nn個省,每個神有自己的折扣per i per i per i 每個省有num i num i num i 個城市。有m mm條路,每條路連線兩個城市u i u i u i 和v i v i v i 原價是w i w i w i 但打折後的 就是 pe r u i per u i pe...
JZOJ 二分 抄書
與書的複製差不多 洛谷 書的複製 但是只要輸出最大的時間 樣例輸入9 3 100 200 300 400 500 600 700 800 900樣例輸出1700樣例解釋1 1500 100 200 300 400 500 2 1300 600 700 3 1700 800 900 1300 1500...
dfs 二分,雙向dfs
達達幫翰翰給女生送禮物,翰翰一共準備了n個禮物,其中第i個禮物的重量是g i 達達的力氣很大,他一次可以搬動重量之和不超過w的任意多個物品。達達希望一次搬掉盡量重的一些物品,請你告訴達達在他的力氣範圍內一次效能搬動的最大重量是多少。輸入格式 第一行兩個整數,分別代表w和n。以後n行,每行乙個正整數表...