3289 2023. 02. 24 08:55:47 renn Turista (40) cpp17 Hibás válasz 6/40 3ms 3788 KiB
#include <bits/stdc++.h>
using namespace std;

int n, m, k, a, b, c, o = 0;
queue<int> path;

void dfs1(vector<vector<pair<int, int>>> &graf, vector<int> &arak, int j)
{
    for(auto &x : graf[j])
    {
        if(arak[j]+x.second < arak[x.first])
        {
            arak[x.first] = arak[j]+x.second;
            dfs1(graf, arak, x.first);
        }
    }
}

void dfs2(vector<vector<pair<int, int>>> &graf, vector<int> &arak, int j)
{
    for(auto &x : graf[j])
    {
        if(arak[j]+x.second == arak[x.first])
        {
            path.push(x.first);
            o += x.second*2;
            dfs2(graf, arak, x.first);
        }
    }
}


int main()
{

    cin.tie(0);
    ios::sync_with_stdio(0);

    cin >> n >> m >> k;

    vector<vector<pair<int, int>>> graf(n+1);
    vector<int> arak(n+1, 1000000);
    arak[k] = 0;
    
    while(m--)
    {
        cin >> a >> b >> c;
        graf[a].push_back({b, c});
        graf[b].push_back({a, c});
    }

    dfs1(graf, arak, k);
    dfs2(graf, arak, k);

    cout << o << "\n";
    while(!path.empty())
    {
        cout << path.front() << " ";
        path.pop();
    }
    cout << "\n";

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 6/40
1 Elfogadva 0/0 3ms 1828 KiB
2 Hibás válasz 0/0 3ms 2060 KiB
3 Elfogadva 2/2 3ms 2244 KiB
4 Elfogadva 2/2 3ms 2452 KiB
5 Elfogadva 2/2 3ms 2544 KiB
6 Hibás válasz 0/2 3ms 2664 KiB
7 Hibás válasz 0/2 3ms 2868 KiB
8 Hibás válasz 0/2 2ms 2948 KiB
9 Hibás válasz 0/2 3ms 3076 KiB
10 Hibás válasz 0/2 3ms 3308 KiB
11 Hibás válasz 0/2 3ms 3528 KiB
12 Hibás válasz 0/2 3ms 3596 KiB
13 Hibás válasz 0/2 3ms 3484 KiB
14 Hibás válasz 0/2 3ms 3488 KiB
15 Hibás válasz 0/2 3ms 3616 KiB
16 Hibás válasz 0/2 3ms 3712 KiB
17 Hibás válasz 0/3 3ms 3692 KiB
18 Hibás válasz 0/3 3ms 3788 KiB
19 Hibás válasz 0/3 3ms 3692 KiB
20 Hibás válasz 0/3 3ms 3700 KiB