Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <queue>
- using namespace std;
- typedef pair<int, int> ii;
- typedef vector<int> vi;
- typedef vector<ii> vii;
- vector<vii> AdjList;
- vector<vii> AdjList1;
- priority_queue< ii, vector<ii>, greater<ii> > pq;
- vi dist;
- #define INF 1000005
- void dijkstra1(int s){
- dist[s] = 0;
- pq.push(ii(0, s));
- while (!pq.empty()) {
- ii front = pq.top();
- pq.pop();
- int w = front.first;
- int u = front.second;
- if (w > dist[u]){
- continue;
- }
- for (int j = 0; j < AdjList1[u].size(); j++) {
- ii v = AdjList1[u][j];
- if (dist[u] + v.second < dist[v.first]) {
- dist[v.first] = dist[u] + v.second;
- pq.push(ii(dist[v.first], v.first));
- }
- }
- }
- }
- void dijkstra(int s){
- dist[s] = 0;
- pq.push(ii(0, s));
- while (!pq.empty()) {
- ii front = pq.top();
- pq.pop();
- int w = front.first;
- int u = front.second;
- if (w > dist[u]){
- continue;
- }
- for (int j = 0; j < AdjList[u].size(); j++) {
- ii v = AdjList[u][j];
- if (dist[u] + v.second < dist[v.first]) {
- dist[v.first] = dist[u] + v.second;
- pq.push(ii(dist[v.first], v.first));
- }
- }
- }
- }
- int main() {
- int V, E, s, a, b, w;
- int A;
- long long q=INF;
- cin >> V >> E >> A;
- cin>>s;
- int y[V];
- AdjList.assign(V, vii());
- AdjList1.assign(V,vii());
- dist.assign(V, INF);
- for (int i = 0; i < E; i++) {
- cin >> a >> b >> w;
- AdjList[a].push_back(ii(b, w));
- AdjList1[b].push_back(ii(a, w));
- }
- dijkstra(A);
- for (int i = 0; i < V; i++){
- y[i] = y[i] + dist[i];
- }
- dist.assign(V, INF);
- dijkstra(s);
- for (int i = 0; i < V; i++){
- y[i] = dist[i];
- }
- dist.assign(V, INF);
- dijkstra1(A);
- for (int i = 0; i < V; i++){
- y[i] = y[i] + dist[i];
- }
- dist.assign(V, INF);
- dijkstra1(s);
- for (int i = 0; i < V; i++){
- y[i] = dist[i];
- }
- for(int i=0;i<V;i++){
- if(q < y[i]){
- q = y[i];
- }
- }
- cout<<q<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement