題目
這道題讓我們求最小限重的最大值
顯然可以先求出最大生成樹,然後在樹上進行操作
因為如果兩點之間有多條路徑的話一定會走最大的,而其他小的路徑是不會被走的
然後考慮求最小權值
可以採用倍增求lca,預處理時順便把最小權值求出來
code:
1 #include2#define io4 10000+10
3#define debug cout<<"error"<4
using
namespace
std;
5int
n,m,q,cnt,cntt;6//
原圖 7
struct
edge e[10*io4];
10 inline void ade(int u,int v,int
w)15 inline bool
cmp(edge a,edge b)
18//
最大生成樹
19struct
edget te[2*io4];
22int
head[io4];
23 inline void adte(int u,int v,int
w)29
//並查集
30int
fa[io4];
31int fd(int
x)34
//kruskal演算法
35 inline void
solve_mst()50}
51//
搜尋 52
int f[io4][25],minw[io4][25
],vis[io4],dep[io4];
53void dfs(int
x)64}65
//預處理
66 inline void
init()73}
74for(int l=1;l<=20;l++)81}
82}83//
倍增求lca(以下都是常規操作)
84 inline int solve_lca(int x,int
y)94}95
if(x==y)return
ans;
96for(int l=20;l>=0;l--)
102}
103//
由於跳到lca下面所以再取一步
104 ans=min(ans,min(minw[x][0],minw[y][0
]));
105return
ans;
106}
107108
intmain()
116solve_mst();
117init();
118 cin>>q;
119for(int i=1;i<=q;i++)
124return
0;//
完結撒花
125 }
洛谷 P1967 貨車運輸
a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔開的整數 n,m,表示 a 國有 ...
洛谷 P1967 貨車運輸
題目描述 a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入輸出格式 輸入格式 輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔...
貨車運輸 洛谷p1967
解法一 30分 直接跑spfa,求最大瓶頸路。include include include define f i,l,r for i l i r i using namespace std const int maxn 10005,maxm 50005,inf 100000000 struct e...