138452025-01-08 21:32:17BucsMateHálózati átvitelcpp17Időlimit túllépés 21/50600ms5900 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]);
        }
        if(maxim != 0){
            cout << maxim << endl;
        }
        else{
            cout << -1 << endl;
        }
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base21/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/03ms500 KiB
3Elfogadva1/11ms512 KiB
4Elfogadva1/11ms316 KiB
5Elfogadva2/22ms316 KiB
6Elfogadva2/28ms428 KiB
7Elfogadva2/28ms448 KiB
8Elfogadva2/28ms444 KiB
9Elfogadva1/16ms564 KiB
10Elfogadva1/129ms816 KiB
11Elfogadva1/1185ms696 KiB
12Elfogadva1/1119ms568 KiB
13Elfogadva2/2152ms564 KiB
14Elfogadva2/2167ms564 KiB
15Időlimit túllépés0/2584ms820 KiB
16Elfogadva2/2523ms820 KiB
17Időlimit túllépés0/2600ms820 KiB
18Időlimit túllépés0/2589ms820 KiB
19Időlimit túllépés0/2584ms820 KiB
20Időlimit túllépés0/2600ms820 KiB
21Elfogadva1/1476ms4660 KiB
22Időlimit túllépés0/1577ms4404 KiB
23Időlimit túllépés0/1591ms4404 KiB
24Időlimit túllépés0/1600ms4592 KiB
25Időlimit túllépés0/2584ms5428 KiB
26Időlimit túllépés0/2579ms5428 KiB
27Időlimit túllépés0/2587ms5424 KiB
28Időlimit túllépés0/2600ms5180 KiB
29Időlimit túllépés0/2577ms5880 KiB
30Időlimit túllépés0/2600ms5900 KiB
31Időlimit túllépés0/2600ms5824 KiB
32Időlimit túllépés0/2600ms5868 KiB