update
This commit is contained in:
parent
8353d5b6d9
commit
5ed151aa4f
68
src/P5024/P5024.cpp
Normal file
68
src/P5024/P5024.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
#include <algorithm>
|
||||
#include <cstdint>
|
||||
#include <iostream>
|
||||
#include <istream>
|
||||
#include <limits>
|
||||
#include <vector>
|
||||
|
||||
using std::cin, std::cout;
|
||||
using ll = int64_t;
|
||||
const ll max_n = 1e5+5, inf = std::numeric_limits<unsigned int>::max();
|
||||
|
||||
ll n, m, tn, dp[max_n][2], p[max_n], add;
|
||||
ll a, x, b, y;
|
||||
std::vector<ll> edges[max_n];
|
||||
char type;
|
||||
|
||||
void dfs(const ll &ft, const ll &now){
|
||||
dp[now][1] = p[now];
|
||||
if(now==a){
|
||||
dp[now][1] = (x==0? inf: 0);
|
||||
}else if(now==b){
|
||||
dp[now][1] = (y==0? inf: 0);
|
||||
}
|
||||
for(const ll &next: edges[now]){
|
||||
if(ft == next)continue;
|
||||
dfs(now, next);
|
||||
dp[now][0] += dp[next][1];
|
||||
dp[now][1] += std::min(dp[next][0], dp[next][1]);
|
||||
}
|
||||
}
|
||||
|
||||
int main(){
|
||||
std::iostream::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
|
||||
|
||||
cin>>n>>m>>type>>tn;
|
||||
for(ll i{1};i<=n;i++){
|
||||
cin>>p[i];
|
||||
}
|
||||
for(ll i{1};i<n;i++){
|
||||
ll u,v;
|
||||
cin>>u>>v;
|
||||
edges[u].push_back(v);
|
||||
edges[v].push_back(u);
|
||||
}
|
||||
for(ll i{1};i<=m;i++){
|
||||
cin>>a>>x>>b>>y;
|
||||
add = 0;
|
||||
if(x==1)add+=p[a];
|
||||
if(y==1)add+=p[b];
|
||||
if(
|
||||
x==0 &&
|
||||
y==0 &&
|
||||
std::find(edges[a].begin(), edges[a].end(), b)
|
||||
!=edges[a].end()
|
||||
){
|
||||
cout<<"-1\n";
|
||||
continue;
|
||||
}
|
||||
for(ll i{0};i<=n;i++){
|
||||
for(ll j{0};j<2;j++){
|
||||
dp[i][j] = 0;
|
||||
}
|
||||
}
|
||||
dfs(0, 1);
|
||||
cout<<(std::min(dp[1][0], dp[1][1])+add)<<'\n';
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user