Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int C, n, m, p, a[101][101];
- int d[101], viz[101], pred[101], b[101];
- ifstream fin("parc.in");
- ofstream fout("parc.out");
- void Citire()
- {
- int x, y, c;
- fin >> n >> m >> C;
- for (int i = 1; i <= n; i++)
- for (int j = i + 1; j <= n; j++)
- a[i][j] = a[j][i] = 1e9;
- for (int i = 1; i <= m; i++)
- {
- fin >> x >> y >> c;
- a[x][y] = a[y][x] = c;
- }
- fin >> p;
- for (int i = 1; i <= p; i++)
- fin >> b[i];
- }
- void Dijkstra(int k)
- {
- int minim, p, i;
- for (i = 1; i <= n; i++)
- {
- d[i] = 1e9;
- pred[i] = viz[i] = 0;
- }
- d[k] = 0;
- for (int pas = 1; pas < n; pas++)
- {
- minim = 1e9;
- p = 0;
- for (i = 1; i <= n; i++)
- if (d[i] < minim && viz[i] == 0)
- {
- minim = d[i];
- p = i;
- }
- if (minim == 1e9)
- return;
- viz[p] = 1;
- for (i = 1; i <= n; i++)
- if (a[p][i] < 1e9 && d[i] > d[p] + a[p][i])
- {
- d[i] = a[p][i] + d[p];
- pred[i] = p;
- }
- }
- }
- int main()
- {
- int k, minim = 1e9 ;
- Citire();
- Dijkstra(C);
- for (int i = 1; i <= p; i++)
- if (minim > d[b[i]])
- {
- minim = d[b[i]];
- k = b[i];
- }
- fout << k;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement