답안 #843937

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
843937 2023-09-04T17:24:31 Z Samrev 경주 (Race) (IOI11_race) C++14
0 / 100
1 ms 2396 KB
#include <bits/stdc++.h>
using namespace std;

typedef long long int ll;
typedef long double ld;
ll t = 1;
const ll M = 1e9 + 7;
ll mod_add(ll a, ll b){
    return ((a%M) + (b %M))%M;
}
ll mod_mul(ll a, ll b){
    return ((a%M)*(b%M))%M;
}
const ll MAX = 1e18;

ll lcm(ll a , ll b){
    return (a*b)/__gcd(a,b);
}
int dfs(vector<pair<int,int>> adj[], int l[], int s , int p , int &k,
    map<int,int> min_length[] , int &n){
    int ans = n;
    for(auto x:adj[s]){
        int u = x.first, e = l[x.second];
        if(u != p){
            min_length[s][e] = 1; 
            int res = dfs(adj , l , u , s , k,min_length, n);
            ans = min(ans , res);
            for(auto path: min_length[u]){
                int cost = path.first + e;
                int length = path.second + 1;
                if(min_length[s].find(cost) == min_length[s].end()){
                    min_length[s][cost] = length;
                } 
                else{
                    min_length[s][cost] = min(min_length[s][cost] , length);
                }
                if(cost == k){
                    ans = min(ans , length);
                }
            }
            min_length[u].clear();
        }
    }
    for(auto path:min_length[s]){
        int cost = path.first ,length = path.second;
        if(min_length[s].find(k - cost) != min_length[s].end()){
            ans = min(ans , length + min_length[s][k - cost]);
        }
    }
    return ans;

}
int best_path(int n, int k , int h[][2], int l[]){
    map<int,int> min_length[n];
    vector<pair<int,int>> adj[n];
    for(int i = 0;i<(n-1) ; i++){
        adj[h[i][0]].push_back({h[i][1],i});
        adj[h[i][1]].push_back({h[i][0],i});

    }
    int ans = dfs(adj , l, 0, -1,k,min_length,n);
    return (ans==n)? -1:ans;


}

// void solve(){
//     int n , k ; cin>>n>>k;
//     int h[n-1][2];
//     int l[n-1];
//     for(int i = 0;i<(n -1);i++){
//         cin>>h[i][0]>>h[i][1];

//     }
//     for(int i = 0 ; i<(n - 1); i++){
//         cin>>l[i];
//     }
//     cout<<best_path(n, k , h , l);
// }
    
    




// int main(){

//     freopen("input.txt" , "r" , stdin);
//     freopen("output.txt" , "w", stdout);
//     cin>>t;
//     while(t--){
//         solve();
//     }
// }
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2396 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2396 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2396 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 2396 KB Output isn't correct
2 Halted 0 ms 0 KB -