답안 #641424

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
641424 2022-09-16T17:10:29 Z DragonO_o Paths (RMI21_paths) C++17
36 / 100
600 ms 18596 KB
#pragma GCC optimize("Ofast")
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
//#pragma GCC optimize("inline,Ofast,no-stack-protector,unroll-loops,fast-math,O3")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,popcnt,avx,abm")

#include <bits/stdc++.h>

using namespace std;

//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
//#define ordered_set tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update>

#define sz(x) (int)(x).size()
#define int long long
#define FOR(i,l,r) for(int i=l;i<=(r);++i)
#define FORd(i,r,l) for(int i=r;i>=(l);--i)
#define pb push_back
#define x first
#define y second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(),x.end()
#define ins insert

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int,int>pii;
typedef pair<ll,ll>pll;
typedef vector<ll>vll;
typedef vector<int>vi;
typedef vector<bool>vb;
typedef vector<vi>vvi;
typedef vector<vll>vvll;
typedef vector<pii>vpii;
typedef vector<pll>vpll;

const int N=2e5+25;
const int MOD=1e9+7;
const int INF=1e18;
const char nl='\n';

int n,k;
vpii g[N];
int dist[N];
int down[N];
int up[N];

void pre_calc1(int v,int p){
    for(auto [to,w]:g[v]){
        if(to!=p){
            dist[to]=dist[v]+w;
            pre_calc1(to,v);
        }
    }
    down[v]=v;
    for(auto [to,w]:g[v]){
        if(to!=p){
            if(dist[down[to]]>=dist[down[v]]){
                down[v]=down[to];
            }
        }
    }
}

void pre_calc2(int v,int p){
    set<pii,greater<pii>>st;
    for(auto [to,w]:g[v]){
        if(to!=p){
            st.insert({dist[down[to]]-dist[v],down[to]});
        }
    }
    for(auto [to,w]:g[v]){
        if(to!=p){
            up[to]=up[v];
            st.erase({dist[down[to]]-dist[v],down[to]});
            pii best=*st.begin();
            if(!st.empty() && w+best.x>dist[to]+dist[up[to]]){
                up[to]=best.y;
            }
            st.insert({dist[down[to]]-dist[v],down[to]});
        }
    }
    for(auto [to,w]:g[v]){
        if(to!=p){
            pre_calc2(to,v);
        }
    }
}

int a[N];
int val[N];
multiset<int,greater<int>>take,rest;

void dfs(int v,int p){
    if(!a[down[v]]){
        a[down[v]]=p;
        val[down[v]]=dist[down[v]]-dist[p];
        rest.insert(val[down[v]]);
    }
    for(auto [to,w]:g[v]){
        if(to!=p){
            dfs(to,v);
        }
    }
}

void solve(){
    cin>>n>>k;
    for(int i=1;i<n;++i){
        int u,v,w;
        cin>>u>>v>>w;
        g[u].pb({v,w});
        g[v].pb({u,w});
    }
    for(int root=1;root<=n;++root){
        for(int i=1;i<=n;++i){
            dist[i]=down[i]=up[i]=a[i]=val[i]=0;
        }
        take.clear();
        rest.clear();
        pre_calc1(root,root);
        up[root]=root;
        pre_calc2(root,root);
        dfs(root,root);
        int cnt=0;
        while(cnt++<k){
            int beg=*rest.begin();
            take.insert(beg);
            rest.erase(rest.find(beg));
        }
        int ans=0;
        for(int it:take){
            ans+=it;
        }
        cout<<ans<<nl;
    }
}

/**
11 3
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
**/

int32_t main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

    int t=1;
//    cin>>t;
    while(t--){
        solve();
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4992 KB Output is correct
2 Correct 3 ms 5032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4992 KB Output is correct
2 Correct 3 ms 5032 KB Output is correct
3 Correct 13 ms 5024 KB Output is correct
4 Correct 10 ms 5076 KB Output is correct
5 Correct 13 ms 5076 KB Output is correct
6 Correct 7 ms 5032 KB Output is correct
7 Correct 12 ms 5212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4992 KB Output is correct
2 Correct 3 ms 5032 KB Output is correct
3 Correct 13 ms 5024 KB Output is correct
4 Correct 10 ms 5076 KB Output is correct
5 Correct 13 ms 5076 KB Output is correct
6 Correct 7 ms 5032 KB Output is correct
7 Correct 12 ms 5212 KB Output is correct
8 Correct 286 ms 5204 KB Output is correct
9 Correct 197 ms 5380 KB Output is correct
10 Correct 151 ms 5324 KB Output is correct
11 Correct 395 ms 5196 KB Output is correct
12 Correct 180 ms 5192 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4992 KB Output is correct
2 Correct 3 ms 5032 KB Output is correct
3 Correct 13 ms 5024 KB Output is correct
4 Correct 10 ms 5076 KB Output is correct
5 Correct 13 ms 5076 KB Output is correct
6 Correct 7 ms 5032 KB Output is correct
7 Correct 12 ms 5212 KB Output is correct
8 Correct 286 ms 5204 KB Output is correct
9 Correct 197 ms 5380 KB Output is correct
10 Correct 151 ms 5324 KB Output is correct
11 Correct 395 ms 5196 KB Output is correct
12 Correct 180 ms 5192 KB Output is correct
13 Execution timed out 1081 ms 5448 KB Time limit exceeded
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 1080 ms 18596 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 4992 KB Output is correct
2 Correct 3 ms 5032 KB Output is correct
3 Correct 13 ms 5024 KB Output is correct
4 Correct 10 ms 5076 KB Output is correct
5 Correct 13 ms 5076 KB Output is correct
6 Correct 7 ms 5032 KB Output is correct
7 Correct 12 ms 5212 KB Output is correct
8 Correct 286 ms 5204 KB Output is correct
9 Correct 197 ms 5380 KB Output is correct
10 Correct 151 ms 5324 KB Output is correct
11 Correct 395 ms 5196 KB Output is correct
12 Correct 180 ms 5192 KB Output is correct
13 Execution timed out 1081 ms 5448 KB Time limit exceeded
14 Halted 0 ms 0 KB -