Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("parc.in");
- ofstream fout("parc.out");
- int N, M, nrP;
- int A[101][101], D[1001], Viz[1001], Pred[1001], Poarta[1001];
- void Dijkstra(int S)
- {
- int i, p, minim, pas;
- for(i = 1 ; i <= N ; ++i)
- D[i] = 1e9;
- D[S] = 0;
- for(pas = 1 ; pas < N ; ++pas)
- {
- minim = 1e9;
- p = 0;
- for(i = 1 ; i <= N ; ++i)
- {
- if(minim > D[i] && Viz[i] == 0)
- {
- minim = D[i];
- p = i;
- }
- }
- if(p == 0) return ;
- Viz[p] = 1;
- for(i = 1 ; i <= N ; ++i)
- {
- if(A[p][i] < 1e9 && D[i] > D[p] + A[p][i])
- {
- D[i] = D[p] + A[p][i];
- Pred[i] = p;
- }
- }
- }
- }
- int main()
- {
- int i, j, x, y, C, L, Minim = 1e9, R;
- fin >> N >> M >> C;
- for(i = 1 ; i < N ; ++i)
- {
- for(j = i + 1 ; j <= N ; ++j)
- {
- A[i][j] = A[j][i] = 1e9;
- }
- }
- for(i = 1 ; i <= M ; ++i)
- {
- fin >> x >> y >> L;
- A[x][y] = A[y][x] = L;
- }
- fin >> nrP;
- for(i = 1 ; i <= nrP ; ++i)
- {
- fin >> x;
- Poarta[x] = 1;
- }
- Dijkstra(C);
- for(i = 1 ; i <= N ; ++i)
- {
- if(D[i] <= Minim && Poarta[i] == 1)
- {
- Minim = D[i];
- R = i;
- }
- }
- fout << R;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement