138422025-01-08 21:27:38BucsMateHálózati átvitelcpp17Hibás válasz 16/50600ms6176 KiB
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

struct Node
{
    int value;
    int dist;
    int index;
};

class hasonlit
{
public:
    bool operator()(Node a, Node b)
    {
        if(a.value == b.value){
            return (a.dist < b.dist);
        }
        else {
            return (a.value > b.value);
        }
    }

};

void dijkstra(vector<vector<pair<int, int>>> &adj, int N, int K, int H, vector<vector<int>> &dp)
{
    priority_queue<Node, vector<Node>, hasonlit> pq;
    pq.push({0, 0, K});
    while(!pq.empty()){
        Node currNode = pq.top();
        pq.pop();
        if(dp[currNode.index][currNode.dist] > currNode.value || currNode.dist >= H){
            continue;
        }
        for(int i = 0; i < adj[currNode.index].size(); i++){
            int newValue;
            if(currNode.value == 0){
                newValue = adj[currNode.index][i].second;
            }
            else {
                newValue = min(currNode.value, adj[currNode.index][i].second);
            }
            Node newNode = {newValue, currNode.dist+1, adj[currNode.index][i].first};
            if(newNode.value > dp[newNode.index][newNode.dist]){
                dp[newNode.index][newNode.dist] = newNode.value;
                pq.push(newNode);
            }
        }
    }
}

int main()
{
    int N, M, K, H;
    cin >> N >> M >> K >> H;
    vector<vector<pair<int, int>>> adj(N+1);
    for(int i = 0; i < M; i++){
        int a, b, c;
        cin >> a >> b >> c;
        adj[a].push_back({b, c});
        adj[b].push_back({a, c});
    }
    vector<vector<int>> dp(N+1, vector<int>(H+1, 0));
    dijkstra(adj, N, K, H, dp);

    for(int i = 1; i <= N; i++){
        if(i == K){
            cout << 0 << endl;
            continue;
        }
        int maxim = 0;
        for(int j = 0; j <= H; j++){
            maxim = max(maxim, dp[i][j]);
        }
        cout << maxim << endl;
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base16/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/03ms316 KiB
3Hibás válasz0/11ms508 KiB
4Hibás válasz0/11ms316 KiB
5Elfogadva2/23ms316 KiB
6Elfogadva2/28ms440 KiB
7Elfogadva2/28ms316 KiB
8Elfogadva2/28ms316 KiB
9Hibás válasz0/16ms564 KiB
10Hibás válasz0/129ms636 KiB
11Elfogadva1/1182ms752 KiB
12Elfogadva1/1118ms564 KiB
13Elfogadva2/2150ms736 KiB
14Elfogadva2/2167ms784 KiB
15Időlimit túllépés0/2578ms820 KiB
16Elfogadva2/2517ms964 KiB
17Időlimit túllépés0/2600ms860 KiB
18Időlimit túllépés0/2582ms1076 KiB
19Időlimit túllépés0/2574ms984 KiB
20Időlimit túllépés0/2600ms796 KiB
21Hibás válasz0/1467ms4804 KiB
22Időlimit túllépés0/1600ms4664 KiB
23Időlimit túllépés0/1575ms4652 KiB
24Időlimit túllépés0/1600ms4840 KiB
25Időlimit túllépés0/2586ms5852 KiB
26Időlimit túllépés0/2580ms5684 KiB
27Időlimit túllépés0/2575ms5940 KiB
28Időlimit túllépés0/2600ms5624 KiB
29Időlimit túllépés0/2589ms6176 KiB
30Időlimit túllépés0/2583ms6152 KiB
31Időlimit túllépés0/2589ms6132 KiB
32Időlimit túllépés0/2587ms6132 KiB