# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
939134 | vjudge1 | Chase (CEOI17_chase) | C++17 | 35 ms | 36952 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
//using namespace __gnu_pbds;
bool YES(bool f){ if(f) cout << "Yes\n" ; else cout << "No\n" ; return f ; }
void YES(){YES(1);}
void NO(){YES(0);}
void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
//#define ordered_set tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update>
#define ios ios_base::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0);
#define int long long
#define ld long double
#define pii pair <int , int>
#define all(x) x.begin() , x.end()
#define ff first
#define ss second
#define endl '\n'
const int N = 1e6 + 5 ;
const int inf = 1e16 ;
const int mod = 1e9 + 7 ;
const double eps = 1e-8 ;
template <class T>
bool chmax( T& x , const T& y ){
bool f = 0 ;
if ( x < y ) x = y , f = 1 ;
return f ;
}
template <class T>
bool chmin( T &x , const T &y ){
bool f = 0 ;
if ( x > y ) x = y , f = 1 ;
return f ;
}
//code
int n , m ;
int a[N] , c[N] , ans[N] ;
vector <int> g[N] ;
bool vis[N] ;
void dfs ( int v , int cnt ){
vis[v] = 1 ;
ans[v] = c[v] ;
if ( cnt==m ) return ;
for ( auto to : g[v] ){
if ( !vis[to] ){
dfs(to,cnt+1) ;
chmax ( ans[v] , c[v]+ans[to]-a[v] ) ;
}
}
}
void solve(){
cin >> n >> m ;
for ( int i = 1 ; i <= n ; i ++ ) cin >> a[i] ;
for ( int i = 1 ; i < n ; i ++ ){
int x , y ; cin >> x >> y ;
g[x].push_back(y) ;
g[y].push_back(x) ;
c[x] += a[y] ;
c[y] += a[x] ;
}
if ( m == 0 ){
cout << 0 ;
return ;
}
if ( n <= 1000 ){
int res = 0 ;
for ( int i = 1 ; i <= n ; i ++ ){
dfs(i,1) ; chmax ( res , ans[i] ) ;
for ( int j = 1 ; j <= n ; j ++ ) vis[j] = 0 , ans[j] = 0 ;
}
cout << res ;
return ;
}
dfs(1,1) ;
cout << ans[1] ;
}
/*
12 0
2 3 3 8 1 5 6 7 8 3 5 4
2 1
2 7
3 4
4 7
7 6
5 6
6 8
6 9
7 10
10 11
10 12
*/
signed main(){
ios ;
int t = 1 ;
//cin >> t ;
while ( t -- ) solve() ;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |