#include<bits/stdc++.h>
using namespace std;
struct AL
{
int data;
int weight;
struct AL *next;
};
#define MAX 100000
typedef pair<int,int> P;
void addEdge(vector<struct AL *> &G,int start,int end,int weight)
{
struct AL *temp = (struct AL *)malloc(sizeof(struct AL));
temp->weight = weight;
temp->data = end;
temp->next = G[start]; //G[start] initially contains NULL
G[start] = temp; //Now G[start] contains value at temp
}
void print(vector<struct AL *> &G,int N)
{
for(int i=0;i<N;i++)
{
struct AL *temp = G[i];
printf("Node %d ",i);
while(temp)
{
printf(" -> %d ",temp->data);
temp = temp->next;
}
printf("\n");
}
}
class cmp
{
public:
bool operator()(P &A,P &B)
{
return A.second > B.second;
}
};
void dijkstra(vector<struct AL *> &G,int start,int N)
{
int distance[N+1],v[N+1],i;
for(i=0;i<N;i++)
{
distance[i] = MAX;
v[i] = 0;
}
distance[start] = 0;
priority_queue<P,vector<P >,cmp > PQ;
PQ.push(make_pair(start,0));
P A;
while(!PQ.empty())
{
A = PQ.top();
PQ.pop();
int u = A.first;
int d = A.second;
if(v[u] == 1)
continue;
v[u] = 1;
struct AL *temp = G[u];
while(temp)
{
if(distance[temp->data] > distance[u] + temp->weight)
distance[temp->data] = distance[u] + temp->weight;
PQ.push(make_pair(temp->data,distance[temp->data]));
temp = temp->next;
}
}
for(i=0;i<N;i++)
printf("%d ",distance[i]);
}
int main(void)
{
vector<struct AL *> Graph;
int v = 5,i;
for(int i=0;i<v;i++)
Graph.push_back(NULL);
addEdge(Graph, 0, 1,10);
addEdge(Graph, 0, 2,3);
addEdge(Graph, 1, 2,1);
addEdge(Graph, 2, 1,4);
addEdge(Graph, 2, 3,8);
addEdge(Graph, 1, 3,2);
addEdge(Graph, 2, 4,2);
addEdge(Graph, 3, 4,7);
addEdge(Graph, 4, 3,9);
dijkstra(Graph,0,v);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IEFMCnsKICAgIGludCBkYXRhOwogICAgaW50IHdlaWdodDsKICAgIHN0cnVjdCBBTCAqbmV4dDsKfTsKI2RlZmluZSBNQVggMTAwMDAwCnR5cGVkZWYgcGFpcjxpbnQsaW50PiBQOwoKdm9pZCBhZGRFZGdlKHZlY3RvcjxzdHJ1Y3QgQUwgKj4gJkcsaW50IHN0YXJ0LGludCBlbmQsaW50IHdlaWdodCkKewogICAgc3RydWN0IEFMICp0ZW1wID0gKHN0cnVjdCBBTCAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IEFMKSk7CiAgICB0ZW1wLT53ZWlnaHQgPSB3ZWlnaHQ7CiAgICB0ZW1wLT5kYXRhID0gZW5kOwogICAgdGVtcC0+bmV4dCA9IEdbc3RhcnRdOyAgLy9HW3N0YXJ0XSBpbml0aWFsbHkgY29udGFpbnMgTlVMTAogICAgR1tzdGFydF0gPSB0ZW1wOyAgICAvL05vdyBHW3N0YXJ0XSBjb250YWlucyB2YWx1ZSBhdCB0ZW1wCn0KCnZvaWQgcHJpbnQodmVjdG9yPHN0cnVjdCBBTCAqPiAmRyxpbnQgTikKewogICAgZm9yKGludCBpPTA7aTxOO2krKykKICAgIHsKICAgICAgICBzdHJ1Y3QgQUwgKnRlbXAgPSBHW2ldOwogICAgICAgIHByaW50ZigiTm9kZSAlZCAiLGkpOwogICAgICAgIHdoaWxlKHRlbXApCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiAtPiAlZCAiLHRlbXAtPmRhdGEpOwogICAgICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgfQp9CgpjbGFzcyBjbXAKewkKCXB1YmxpYzoKCQlib29sIG9wZXJhdG9yKCkoUCAmQSxQICZCKQoJCXsKCQkJcmV0dXJuIEEuc2Vjb25kID4gQi5zZWNvbmQ7CgkJfQp9OwoKdm9pZCBkaWprc3RyYSh2ZWN0b3I8c3RydWN0IEFMICo+ICZHLGludCBzdGFydCxpbnQgTikKewogICAgaW50IGRpc3RhbmNlW04rMV0sdltOKzFdLGk7CiAgICBmb3IoaT0wO2k8TjtpKyspCiAgICB7CgkJZGlzdGFuY2VbaV0gPSBNQVg7CgkJdltpXSA9IDA7Cgl9CiAgICBkaXN0YW5jZVtzdGFydF0gPSAwOwoJcHJpb3JpdHlfcXVldWU8UCx2ZWN0b3I8UCA+LGNtcCA+IFBROwoJUFEucHVzaChtYWtlX3BhaXIoc3RhcnQsMCkpOwoJUCBBOwoJd2hpbGUoIVBRLmVtcHR5KCkpCgl7CgkJQSA9IFBRLnRvcCgpOwoJCVBRLnBvcCgpOwoJCWludCB1ID0gQS5maXJzdDsKCQlpbnQgZCA9IEEuc2Vjb25kOwoJCWlmKHZbdV0gPT0gMSkKCQkJY29udGludWU7CgkJdlt1XSA9IDE7CgkJc3RydWN0IEFMICp0ZW1wID0gR1t1XTsKCQl3aGlsZSh0ZW1wKQoJCXsKCQkJaWYoZGlzdGFuY2VbdGVtcC0+ZGF0YV0gPiBkaXN0YW5jZVt1XSArIHRlbXAtPndlaWdodCkKCQkJCWRpc3RhbmNlW3RlbXAtPmRhdGFdID0gZGlzdGFuY2VbdV0gKyB0ZW1wLT53ZWlnaHQ7CgkJCVBRLnB1c2gobWFrZV9wYWlyKHRlbXAtPmRhdGEsZGlzdGFuY2VbdGVtcC0+ZGF0YV0pKTsKCQkJdGVtcCA9IHRlbXAtPm5leHQ7CgkJfQoJfQoJCQoJZm9yKGk9MDtpPE47aSsrKQoJCXByaW50ZigiJWQgIixkaXN0YW5jZVtpXSk7CiAgCn0KCmludCBtYWluKHZvaWQpCnsKICAgIHZlY3RvcjxzdHJ1Y3QgQUwgKj4gR3JhcGg7CiAgICBpbnQgdiA9IDUsaTsKICAgIGZvcihpbnQgaT0wO2k8djtpKyspCiAgICAgICAgR3JhcGgucHVzaF9iYWNrKE5VTEwpOwogICAgYWRkRWRnZShHcmFwaCwgMCwgMSwxMCk7CiAgICBhZGRFZGdlKEdyYXBoLCAwLCAyLDMpOwogICAgYWRkRWRnZShHcmFwaCwgMSwgMiwxKTsKICAgIGFkZEVkZ2UoR3JhcGgsIDIsIDEsNCk7CiAgICBhZGRFZGdlKEdyYXBoLCAyLCAzLDgpOwogICAgYWRkRWRnZShHcmFwaCwgMSwgMywyKTsKICAgIGFkZEVkZ2UoR3JhcGgsIDIsIDQsMik7CiAgICBhZGRFZGdlKEdyYXBoLCAzLCA0LDcpOwogICAgYWRkRWRnZShHcmFwaCwgNCwgMyw5KTsKICAgIGRpamtzdHJhKEdyYXBoLDAsdik7CiAgICByZXR1cm4gMDsKfQoKCg==