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