生活随笔
收集整理的這篇文章主要介紹了
牛客 吉吉王国
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鏈接:https://ac.nowcoder.com/acm/problem/210473
來源:牛客網(wǎng)
吉吉王國(guó)有nn個(gè)城市,其中11號(hào)城市就是吉吉王國(guó)的首都,并且吉吉王國(guó)有n-1n?1條道路,每條道路都有一個(gè)長(zhǎng)度dd,你可以從任意一點(diǎn)uu到達(dá)任意一點(diǎn)vv。但是最近吉吉王國(guó)發(fā)生了動(dòng)亂,除了首都外,每個(gè)只有一條道路連向的城市出現(xiàn)了反叛軍。
這些城市的反叛軍開始向吉吉王國(guó)的首都發(fā)起了進(jìn)攻,如果讓他們到達(dá)首都,那么吉吉國(guó)王就要換人了。吉吉國(guó)王現(xiàn)在需要快速切斷一些道路,使得沒有一個(gè)城市的反叛軍可以到達(dá)首都。但是由于物資的限制,他能切斷的道路的總長(zhǎng)度和不能超過mm,并且要保證切斷道路盡量快,因此切斷的道路中最長(zhǎng)的長(zhǎng)度要盡可能小。
現(xiàn)在趕緊告訴吉吉國(guó)王切斷的道路的最長(zhǎng)長(zhǎng)度在最小的時(shí)候是多少吧。
輸入描述:
第一行兩個(gè)整數(shù)n, mn,m。
接下來n-1n?1行每行三個(gè)整數(shù)u, v,du,v,d表示城市uu和城市vv有一條長(zhǎng)度為dd的道路。
輸出描述:
如果存在方案使得首都安全,輸出最小的最長(zhǎng)長(zhǎng)度,否則輸出-1。
思路:
和loves rinne很像,可以說是加強(qiáng)版
思路是因?yàn)橛锌傞L(zhǎng)m和最長(zhǎng)值最小的限制,因此可以使用二分答案,
二分最長(zhǎng)值,用總長(zhǎng)限制m來檢驗(yàn)是否符合要求
#include<bits/stdc++.h>
using namespace std
;
#define N 1010const int INF
=1e7+10;int n
,m
;
int e
[2*N
],ne
[2*N
],w
[N
*2],h
[N
],idx
=0;
int f
[N
]; void add(int a
,int b
,int c
){e
[idx
]=b
,w
[idx
]=c
,ne
[idx
]=h
[a
],h
[a
]=idx
++;
}void dfs(int u
,int pre
,int len
){bool is_leaf
=true;for(int i
=h
[u
];~i
;i
=ne
[i
]){int j
=e
[i
];if(j
==pre
) continue;dfs(j
,u
,len
);is_leaf
=false;f
[u
]+=min(f
[j
],w
[i
]>len
?INF
:w
[i
]);}if(is_leaf
) f
[u
]=INF
;;
}int main(){memset(h
,-1,sizeof h
);scanf("%d%d",&n
,&m
);for(int i
=1;i
<n
;i
++){int u
,v
,d
;scanf("%d%d%d",&u
,&v
,&d
);add(u
,v
,d
),add(v
,u
,d
);}int ans
=0;int l
=0,r
=1e7+10;while(l
<r
){int mid
=l
+r
>>1;memset(f
,0,sizeof f
);dfs(1,-1,mid
);if(f
[1]<=m
) r
=mid
,ans
=r
;else l
=mid
+1;}if(!ans
) puts("-1");else printf("%d\n",ans
);return 0;
}
總結(jié)
以上是生活随笔為你收集整理的牛客 吉吉王国的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。