Submission #717426

#TimeUsernameProblemLanguageResultExecution timeMemory
717426vjudge1Paths (RMI21_paths)C++17
19 / 100
1090 ms16076 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define int long long #define endl '\n' using namespace std; using namespace __gnu_pbds; using ordered_set = tree<pair<int,int>,null_type,less<pair<int,int>>,rb_tree_tag,tree_order_statistics_node_update>; vector<pair<int,int>>vct[100001]; vector<pair<int,int>>vec[100001]; int fath[100001]; int mx[100001]; int mxx[100001]; int mp[1001][1001]; int n,in=1; long long ans; void dfss(int in){ if(in==1){ vector<pair<int,int>>v; for(auto &i:vec[in]){ v.push_back({mx[i.first]+i.second,i.first}); } sort(v.begin(),v.end()); for(auto &i:vec[in]){ if(i.first!=v.back().second)mxx[i.first]=v.back().first; else if(v.size()>1)mxx[i.first]=v[v.size()-2].first; mxx[i.first]+=i.second; dfss(i.first); } }else{ for(auto &i:vec[in]){ mxx[i.first]=i.second+mxx[in]; dfss(i.first); } } } int dfs(int in){ for(auto &i:vec[in]){ mx[in]=max(mx[in],dfs(i.first)+i.second); } return mx[in]; } void slv(){ deque<pair<long long,int>>pq={{0,in}}; vector<int>vis(n+1); long long g=0; vis[in]=in; while(pq.size()){ int a=pq.front().second; long long b=pq.front().first; pq.pop_front(); if(b>=g){ g=b; in=a; } for(auto &i:vct[a]){ if(!vis[i.first]){ vis[i.first]=a; pq.push_back({b+mp[a][i.first],i.first}); } } } int I=in; while(vis[I]!=I){ ans+=mp[vis[I]][I]; mp[vis[I]][I]=0; mp[I][vis[I]]=0; I=vis[I]; } } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int k; cin>>n>>k; for(int i=1;i<n;i++){ int a,b,c; cin>>a>>b>>c; vct[a].push_back({b,c}); vct[b].push_back({a,c}); } if(k!=1){ vector<int>v(n+1,-1); int K=k; for(int w=1;w<=n;w++){ ans=0; in=w; for(int j=1;j<=n;j++){ for(auto &z:vct[j]){ mp[j][z.first]=z.second; } } k=K; while(k--)slv(); v[in]=ans; cout<<ans<<endl; } }else{ deque<int>dq={1}; vector<bool>vis(n+1); vis[1]=1; while(dq.size()){ int a=dq.front(); dq.pop_front(); for(auto &i:vct[a]){ if(!vis[i.first]){ vis[i.first]=1; dq.push_back(i.first); vec[a].push_back(i); fath[i.first]=a; } } } dfs(1); dfss(1); for(int i=1;i<=n;i++)cout<<max(mx[i],mxx[i])<<endl; } } /* 11 1 1 2 5 2 3 3 2 6 5 3 4 4 3 5 2 1 7 6 7 8 4 7 9 5 1 10 1 10 11 1 */
#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...