답안 #717425

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
717425 2023-04-01T22:41:02 Z vjudge1 Paths (RMI21_paths) C++17
19 / 100
600 ms 16080 KB
#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+mx[i.first];
            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
*/
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5076 KB Output is correct
2 Correct 3 ms 5076 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5076 KB Output is correct
2 Correct 3 ms 5076 KB Output is correct
3 Correct 15 ms 5844 KB Output is correct
4 Correct 15 ms 5844 KB Output is correct
5 Correct 15 ms 5916 KB Output is correct
6 Correct 13 ms 5844 KB Output is correct
7 Correct 16 ms 5844 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5076 KB Output is correct
2 Correct 3 ms 5076 KB Output is correct
3 Correct 15 ms 5844 KB Output is correct
4 Correct 15 ms 5844 KB Output is correct
5 Correct 15 ms 5916 KB Output is correct
6 Correct 13 ms 5844 KB Output is correct
7 Correct 16 ms 5844 KB Output is correct
8 Execution timed out 1077 ms 10288 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5076 KB Output is correct
2 Correct 3 ms 5076 KB Output is correct
3 Correct 15 ms 5844 KB Output is correct
4 Correct 15 ms 5844 KB Output is correct
5 Correct 15 ms 5916 KB Output is correct
6 Correct 13 ms 5844 KB Output is correct
7 Correct 16 ms 5844 KB Output is correct
8 Execution timed out 1077 ms 10288 KB Time limit exceeded
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 79 ms 16080 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 5076 KB Output is correct
2 Correct 3 ms 5076 KB Output is correct
3 Correct 15 ms 5844 KB Output is correct
4 Correct 15 ms 5844 KB Output is correct
5 Correct 15 ms 5916 KB Output is correct
6 Correct 13 ms 5844 KB Output is correct
7 Correct 16 ms 5844 KB Output is correct
8 Execution timed out 1077 ms 10288 KB Time limit exceeded
9 Halted 0 ms 0 KB -