답안 #939130

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
939130 2024-03-06T06:06:42 Z vjudge1 Chase (CEOI17_chase) C++17
0 / 100
36 ms 38248 KB
#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 ( 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 2
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

chase.cpp: In function 'void fopn(std::string)':
chase.cpp:10:31: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 | void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
chase.cpp:10:72: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   10 | void fopn(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                                                                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 29020 KB Output is correct
2 Incorrect 6 ms 29112 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 29020 KB Output is correct
2 Incorrect 6 ms 29112 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 36 ms 38248 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 29020 KB Output is correct
2 Incorrect 6 ms 29112 KB Output isn't correct
3 Halted 0 ms 0 KB -