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...