Submission #1172705

#TimeUsernameProblemLanguageResultExecution timeMemory
1172705MinbaevPaths (RMI21_paths)C++20
31 / 100
1095 ms32468 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast,unroll-loops")

using namespace std;
using namespace __gnu_pbds;

#define pb 		push_back
#define all(x)	x.begin(),x.end()
#define int 	long long
#define ar 		array

template<class T>bool umax(T &a,T b){if(a<b){a=b;return true;}return false;}
template<class T>bool umin(T &a,T b){if(b<a){a=b;return true;}return false;}

template<class T> using ste = tree<T, null_type, less_equal<T>,
rb_tree_tag, tree_order_statistics_node_update>;

namespace FAST {
    template<typename T, typename F>
    istream &operator>>(istream &cin, pair<T, F> &p) {
        cin >> p.first >> p.second;
        return cin;
    }

    template<typename T, typename F>
    ostream &operator<<(ostream &cout, pair<T, F> &p) {
        cout << p.first << ' ' << p.second;
        return cout;
    }

    template<typename T>
    istream &operator>>(istream &cin, vector<T> &a) {
    for (T &i: a) cin >> i;
        return cin;
    }

    template<typename T>
    ostream &operator<<(ostream &cout, vector<T> &a) {
        for (T i: a) cout << i << ' ';
        return cout;
    }

    template<typename T>
    istream &operator>>(istream &cin, deque<T> &a) {
        for (T &i: a) cin >> i;
        return cin;
    }

    template<typename T>
    ostream &operator<<(ostream &cout, deque<T> &a) {
        for (T i: a) cout << i << ' ';
        return cout;
    }
}
using namespace FAST;

const int inf = 3e18 + 7;
const int mod = 1e9 + 7;
const int N = 5e5 + 5;
const int md = 998244353;

int binpow(int a, int b, int m){
	if(b == 0)return 1;
	if(b % 2 == 0){
		int c = binpow(a,b/2,m);
		return (c*c)%m;
	}
	return (binpow(a,b-1,m)*a)%m;
}

int divi(int a, int b, int m){
	return (a*(binpow(b,m-2, m)))%m;
}

int n,m,k,q;
vector<vector<int>>dp(2005, vector<int>(105, -1));
vector<ar<int,2>>g[N];
vector<int>sub(N), res(N);

void dfs(int x, int pr){
	for(int i = 1;i<=m+1;i++){
		dp[x][i] = -1;
	}
	dp[x][0] = 0;
	for(auto [to, cost]:g[x]){
		if(to == pr)continue;
		dfs(to, x);
		
		vector<int>dp_n(105);
		dp_n = dp[x];
		
		int flag = 1;
		if(g[to].size() == 1 && to != 1)flag = 0;
		
		for(int i = flag;i<=m;i++){
			for(int j = m-i-(flag ^ 1);j>=0;j--){
				if(dp_n[j] == -1 || dp[to][i] == -1)continue;
				umax(dp[x][i+j+(flag ^ 1)], dp_n[j] + dp[to][i] + cost);
			}
		}
	}
}	

void dfs2(int x, int pr){
	
	for(auto [to, cost]:g[x]){
		if(to == pr)continue;
		dfs2(to, x);
		umax(sub[x], sub[to] + cost);
	}
}

void ans(int x, int pr, int val){
	res[x] = max(sub[x], val);
	
	vector<ar<int,3>>vs;
	for(auto [to, cost]:g[x]){
		if(to == pr)continue;
		vs.pb({sub[to] + cost, to, cost});
	}
	
	sort(all(vs));
	reverse(all(vs));
	if(vs.size() == 1){
		ans(vs[0][1], x, val + vs[0][2]);
	}
	else if(vs.size() > 1){
		ans(vs[0][1], x	, max(val + vs[0][2], vs[1][0] + vs[0][2]));
		for(int i = 1;i<vs.size();i++){
			ans(vs[i][1], x, max(val + vs[i][2], vs[0][0] + vs[i][2]));
		}
	}
}

void solve(){
	
	cin >> n >> m;
	for(int i = 2;i<=n;i++){
		int a,b,c;
		cin >> a >> b >> c;
		g[a].pb({b, c});
		g[b].pb({a, c});
	}
	
	if(m == 1){
		dfs2(1, -1);
		ans(1, -1, 0);
		for(int i = 1;i<=n;i++){
			cout << res[i] << "\n";
		}
		return;
	}
	
	
	for(int i = 1;i<=n;i++){
		dfs(i, -1);
//		if(i == 2){
//			for(int i = 1;i<=n;i++){
//				for(int j = 0;j<=3;j++)cout << dp[i][j] << " ";
//				cout << "\n";
//			}
//		}
//		int mx = 0;
//		for(int j = 0;j<=m;j++){
//			
//		}
//		cout << dp[i] << "\n";
		cout << *max_element(all(dp[i])) << "\n";
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}
/*

*/
 signed main()
{
//	freopen("seq.in", "r", stdin);
//  freopen("seq.out", "w", stdout);
	ios_base::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL);
	int tt=1;//cin>>tt;
	while(tt--)solve();

}





Compilation message (stderr)

In file included from /usr/include/c++/11/bits/specfun.h:45,
                 from /usr/include/c++/11/cmath:1935,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:41,
                 from Main.cpp:1:
In static member function 'static constexpr _Tp* std::__copy_move<_IsMove, true, std::random_access_iterator_tag>::__copy_m(const _Tp*, const _Tp*, _Tp*) [with _Tp = long long int; bool _IsMove = false]',
    inlined from 'constexpr _OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = long long int*; _OI = long long int*]' at /usr/include/c++/11/bits/stl_algobase.h:495:30,
    inlined from 'constexpr _OI std::__copy_move_a1(_II, _II, _OI) [with bool _IsMove = false; _II = long long int*; _OI = long long int*]' at /usr/include/c++/11/bits/stl_algobase.h:522:42,
    inlined from 'constexpr _OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = long long int*; _OI = long long int*]' at /usr/include/c++/11/bits/stl_algobase.h:529:31,
    inlined from 'constexpr _OI std::copy(_II, _II, _OI) [with _II = long long int*; _OI = long long int*]' at /usr/include/c++/11/bits/stl_algobase.h:620:7,
    inlined from 'static _ForwardIterator std::__uninitialized_copy<true>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = long long int*; _ForwardIterator = long long int*]' at /usr/include/c++/11/bits/stl_uninitialized.h:110:27,
    inlined from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = long long int*; _ForwardIterator = long long int*]' at /usr/include/c++/11/bits/stl_uninitialized.h:151:15,
    inlined from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = long long int*; _ForwardIterator = long long int*; _Tp = long long int]' at /usr/include/c++/11/bits/stl_uninitialized.h:333:37,
    inlined from 'std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&) [with _Tp = long long int; _Alloc = std::allocator<long long int>]' at /usr/include/c++/11/bits/vector.tcc:245:35,
    inlined from 'void dfs(long long int, long long int)' at Main.cpp:93:14:
/usr/include/c++/11/bits/stl_algobase.h:431:30: warning: 'void* __builtin_memmove(void*, const void*, long unsigned int)' writing 1 or more bytes into a region of size 0 overflows the destination [-Wstringop-overflow=]
  431 |             __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
      |             ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/x86_64-linux-gnu/c++/11/bits/c++allocator.h:33,
                 from /usr/include/c++/11/bits/allocator.h:46,
                 from /usr/include/c++/11/string:41,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/bits/ios_base.h:41,
                 from /usr/include/c++/11/ios:42,
                 from /usr/include/c++/11/istream:38,
                 from /usr/include/c++/11/sstream:38,
                 from /usr/include/c++/11/complex:45,
                 from /usr/include/c++/11/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/11/bits/stdc++.h:54,
                 from Main.cpp:1:
/usr/include/c++/11/ext/new_allocator.h: In function 'void dfs(long long int, long long int)':
/usr/include/c++/11/ext/new_allocator.h:127:48: note: at offset 840 into destination object of size 840 allocated by 'operator new'
  127 |         return static_cast<_Tp*>(::operator new(__n * sizeof(_Tp)));
      |                                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...