# include <stdio.h>
# include <stdlib.h>
void dijkstra(int *,int *,int *,int,int,int , int **);
int minDistance(int dist[],int final[], int n) {
int i, min=9999999, ind=-1;
for(i=0; i<n; i++) {
if(final[i]==-1 && dist[i]<min) {
min=dist[i];
ind=i;
}
}
return ind;
}
void copy(int p2[],int par[],int n) {
int i;
for(i=0; i<n; i++)
p2[i]=par[i];
}
int dist(int par[],int s,int t, int **adj) {
int i,dis=0;
for(i=t; i!=s; i=par[i]) {
dis+=adj[par[i]][i];
}
return dis;
}
void dj(int *p1,int s,int t, int n, int **graph)
{
int dist[n], final[n];
//initialize(dist,p1,final, n);
int i,count,v; // Initialize all distances as INFINITE and stpSet[] as false
for (i = 0; i < n; i++) {
dist[i] = 999999;
p1[i]=-1;
final[i]=-1;
}
// Distance of source vertex from itself is always 0
dist[s] = 0;
// Find shortest path for all vertices
for (count = 0; count < n-1; count++)
{
// Pick the minimum distance vertex from the set of vertices not
// yet processed. u is always equal to src in first iteration.
int u = minDistance(dist, final, n);
// Mark the picked vertex as processed
final[u]=0;
// Update dist value of the adjacent vertices of the picked vertex.
for (v = 0; v < n; v++)
if (final[v]==-1 && graph[u][v]!=-1 && dist[u]+graph[u][v] < dist[v]) {
dist[v] = dist[u] + graph[u][v];
p1[v]=u;
}
}
}
int main()
{
int **adj, *parent1,*parent2,*parent3;
int n,k,i,j,s,t,w;
adj
= (int **)calloc(n
,sizeof(int *)); for(i=0;i<n;i++)
{
adj
[i
] = (int *)calloc(n
,sizeof(int)); }
parent1
= (int *)calloc(n
,sizeof(int)); parent2
= (int *)calloc(n
,sizeof(int)); parent3
= (int *)calloc(n
,sizeof(int));
for(i=0; i<n; i++)
for(j=0; j<n; j++)
adj[i][j]=-1;
scanf("%d%d%d",&i
,&j
,&k
); while(i!=-1)
{
adj[i][j]=k;
scanf("%d%d%d",&i
,&j
,&k
); }
dijkstra(parent1,parent2,parent3,s,t,n,adj);
int temp=t;
while(temp!=s)
{
temp=parent1[temp];
}
temp=t;
while(temp!=s)
{
temp=parent2[temp];
}
temp=t;
while(temp!=s)
{
temp=parent3[temp];
}
return 0;
}
void dijkstra(int *p1,int *ps,int *p3,int s,int t, int n, int **graph)
{
dj(p1,s,t,n,graph);
int i,count,v;
int arr[n],par[n];
arr[0]=t;
for(i=t,v=1; i!=s; v++) {
arr[v]=p1[i];
i=p1[i];
}
arr[v]=i;
int v1=v;
int c1,min=999999;
for(i=0; i<v-1; i++) {
c1=graph[arr[i]][arr[i+1]];
graph[arr[i+1]][arr[i]]=-1;
dj(par,s,t,n,graph);
if(min>dist(par,s,t,graph)) {
copy(ps,par,n);
}
graph[arr[i]][arr[i+1]]=c1;
}
/*int ar[n], c2,j;
ar[0]=t;
for(i=t,v=1; i!=s; v1++) {
ar[v]=ps[i];
i=ps[i];
}
ar[v1]=i;
for(i=0; i<v-1; i++) {
for(j=0; j<v1-1; j++) {
c2=graph[ar[j]][ar[j+1]];
c1=graph[arr[i]][arr[i+1]];
graph[ar[j]][ar[j+1]]=-1;
graph[arr[i+1]][arr[i]]=-1;
dj(par,s,t,n,graph);
if(min>dist(par,s,t,graph)) {
copy(p3,par,n);
}
graph[ar[j]][ar[j+1]]=c2;
graph[arr[i]][arr[i+1]]=c1;
}
}*/
}
IyBpbmNsdWRlIDxzdGRpby5oPgojIGluY2x1ZGUgPHN0ZGxpYi5oPgoKdm9pZCBkaWprc3RyYShpbnQgKixpbnQgKixpbnQgKixpbnQsaW50LGludCAsIGludCAqKik7CmludCBtaW5EaXN0YW5jZShpbnQgZGlzdFtdLGludCBmaW5hbFtdLCBpbnQgbikgewoJaW50IGksIG1pbj05OTk5OTk5LCBpbmQ9LTE7Cglmb3IoaT0wOyBpPG47IGkrKykgewoJCWlmKGZpbmFsW2ldPT0tMSAmJiBkaXN0W2ldPG1pbikgewoJCQltaW49ZGlzdFtpXTsKCQkJaW5kPWk7CgkJfQoJfQoJcmV0dXJuIGluZDsKfQoKdm9pZCBjb3B5KGludCBwMltdLGludCBwYXJbXSxpbnQgbikgewoJaW50IGk7Cglmb3IoaT0wOyBpPG47IGkrKykKCQlwMltpXT1wYXJbaV07Cn0KCmludCBkaXN0KGludCBwYXJbXSxpbnQgcyxpbnQgdCwgaW50ICoqYWRqKSB7CglpbnQgaSxkaXM9MDsKCWZvcihpPXQ7IGkhPXM7IGk9cGFyW2ldKSB7CgkJZGlzKz1hZGpbcGFyW2ldXVtpXTsKCX0KCXJldHVybiBkaXM7Cn0KCnZvaWQgZGooaW50ICpwMSxpbnQgcyxpbnQgdCwgaW50IG4sIGludCAqKmdyYXBoKQp7CiAgaW50IGRpc3Rbbl0sIGZpbmFsW25dOyAgICAgCiAgLy9pbml0aWFsaXplKGRpc3QscDEsZmluYWwsIG4pOwogIAogIGludCBpLGNvdW50LHY7ICAgLy8gSW5pdGlhbGl6ZSBhbGwgZGlzdGFuY2VzIGFzIElORklOSVRFIGFuZCBzdHBTZXRbXSBhcyBmYWxzZQogIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBkaXN0W2ldID0gOTk5OTk5OwogICAgICAgIHAxW2ldPS0xOwogICAgICAgIGZpbmFsW2ldPS0xOwogIH0KICAKICAgICAvLyBEaXN0YW5jZSBvZiBzb3VyY2UgdmVydGV4IGZyb20gaXRzZWxmIGlzIGFsd2F5cyAwCiAgZGlzdFtzXSA9IDA7CiAgCiAgLy8gRmluZCBzaG9ydGVzdCBwYXRoIGZvciBhbGwgdmVydGljZXMKICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBuLTE7IGNvdW50KyspCiAgICAgewogICAgICAgLy8gUGljayB0aGUgbWluaW11bSBkaXN0YW5jZSB2ZXJ0ZXggZnJvbSB0aGUgc2V0IG9mIHZlcnRpY2VzIG5vdAogICAgICAgLy8geWV0IHByb2Nlc3NlZC4gdSBpcyBhbHdheXMgZXF1YWwgdG8gc3JjIGluIGZpcnN0IGl0ZXJhdGlvbi4KICAgICAgIGludCB1ID0gbWluRGlzdGFuY2UoZGlzdCwgZmluYWwsIG4pOwogICAgICAgcHJpbnRmKCJ1PSVkIiwgdSk7CiAgICAgICAvLyBNYXJrIHRoZSBwaWNrZWQgdmVydGV4IGFzIHByb2Nlc3NlZAogICAgICAgZmluYWxbdV09MDsKICAKICAgICAgIC8vIFVwZGF0ZSBkaXN0IHZhbHVlIG9mIHRoZSBhZGphY2VudCB2ZXJ0aWNlcyBvZiB0aGUgcGlja2VkIHZlcnRleC4KICAgICAgIGZvciAodiA9IDA7IHYgPCBuOyB2KyspCgkJCiAgICAgICAgIGlmIChmaW5hbFt2XT09LTEgJiYgZ3JhcGhbdV1bdl0hPS0xICYmIGRpc3RbdV0rZ3JhcGhbdV1bdl0gPCBkaXN0W3ZdKSB7CiAgICAgICAgICAgIGRpc3Rbdl0gPSBkaXN0W3VdICsgZ3JhcGhbdV1bdl07CiAgICAgICAgICAgIHAxW3ZdPXU7CiAgICAgICAgIH0KICAgICB9Cn0KCmludCBtYWluKCkKewogIGludCAqKmFkaiwgKnBhcmVudDEsKnBhcmVudDIsKnBhcmVudDM7CiAgaW50IG4sayxpLGoscyx0LHc7CiAgc2NhbmYoIiVkIiwmbik7CiAgYWRqID0gKGludCAqKiljYWxsb2MobixzaXplb2YoaW50ICopKTsKICBmb3IoaT0wO2k8bjtpKyspCiAgICB7CiAgICAgIGFkaltpXSA9IChpbnQgKiljYWxsb2MobixzaXplb2YoaW50KSk7CiAgICB9CiAgcGFyZW50MSA9IChpbnQgKiljYWxsb2MobixzaXplb2YoaW50KSk7CiAgcGFyZW50MiA9IChpbnQgKiljYWxsb2MobixzaXplb2YoaW50KSk7CiAgcGFyZW50MyA9IChpbnQgKiljYWxsb2MobixzaXplb2YoaW50KSk7CiAgCiAgZm9yKGk9MDsgaTxuOyBpKyspCiAgICBmb3Ioaj0wOyBqPG47IGorKykKICAgICAgYWRqW2ldW2pdPS0xOwogIAogIHNjYW5mKCIlZCVkJWQiLCZpLCZqLCZrKTsKICB3aGlsZShpIT0tMSkKICAgIHsKICAgICAgYWRqW2ldW2pdPWs7CiAgICAgIHNjYW5mKCIlZCVkJWQiLCZpLCZqLCZrKTsKICAgIH0KICBzY2FuZigiJWQlZCIsJnMsJnQpOwogIGRpamtzdHJhKHBhcmVudDEscGFyZW50MixwYXJlbnQzLHMsdCxuLGFkaik7CiAgaW50IHRlbXA9dDsKICBwcmludGYoIlxuIHBhdGgxOiAlZCIsdCk7CiAgd2hpbGUodGVtcCE9cykKICAgIHsKICAgICAgcHJpbnRmKCItPiVkIixwYXJlbnQxW3RlbXBdKTsKICAgICAgdGVtcD1wYXJlbnQxW3RlbXBdOwogICAgfQogIHRlbXA9dDsKICBwcmludGYoIlxuIHBhdGgyOiAlZCIsdCk7CiAgd2hpbGUodGVtcCE9cykKICAgIHsKICAgICAgcHJpbnRmKCItPiVkIixwYXJlbnQyW3RlbXBdKTsKICAgICAgdGVtcD1wYXJlbnQyW3RlbXBdOwogICAgfQogIHRlbXA9dDsKICBwcmludGYoIlxuIHBhdGgzOiAlZCIsdCk7CiAgd2hpbGUodGVtcCE9cykKICAgIHsKICAgICAgcHJpbnRmKCItPiVkIixwYXJlbnQzW3RlbXBdKTsKICAgICAgdGVtcD1wYXJlbnQzW3RlbXBdOwogICAgfQogIHJldHVybiAwOwp9Cgp2b2lkIGRpamtzdHJhKGludCAqcDEsaW50ICpwcyxpbnQgKnAzLGludCBzLGludCB0LCBpbnQgbiwgaW50ICoqZ3JhcGgpCnsKCWRqKHAxLHMsdCxuLGdyYXBoKTsKCWludCBpLGNvdW50LHY7CglpbnQgYXJyW25dLHBhcltuXTsKCWFyclswXT10OwoJZm9yKGk9dCx2PTE7IGkhPXM7IHYrKykgewoJCWFyclt2XT1wMVtpXTsKCQlpPXAxW2ldOwoJfQoJYXJyW3ZdPWk7CglpbnQgdjE9djsKCWludCBjMSxtaW49OTk5OTk5OwoJZm9yKGk9MDsgaTx2LTE7IGkrKykgewoJCWMxPWdyYXBoW2FycltpXV1bYXJyW2krMV1dOwoJCWdyYXBoW2FycltpKzFdXVthcnJbaV1dPS0xOwoJCWRqKHBhcixzLHQsbixncmFwaCk7CgkJaWYobWluPmRpc3QocGFyLHMsdCxncmFwaCkpIHsKCQkJY29weShwcyxwYXIsbik7CgkJfQoJCWdyYXBoW2FycltpXV1bYXJyW2krMV1dPWMxOwoJfQoJLyppbnQgYXJbbl0sIGMyLGo7CglhclswXT10OwoJZm9yKGk9dCx2PTE7IGkhPXM7IHYxKyspIHsKCQlhclt2XT1wc1tpXTsKCQlpPXBzW2ldOwoJfQoJYXJbdjFdPWk7Cglmb3IoaT0wOyBpPHYtMTsgaSsrKSB7CgkJZm9yKGo9MDsgajx2MS0xOyBqKyspIHsKCQkJYzI9Z3JhcGhbYXJbal1dW2FyW2orMV1dOwoJCQljMT1ncmFwaFthcnJbaV1dW2FycltpKzFdXTsKCQkJZ3JhcGhbYXJbal1dW2FyW2orMV1dPS0xOwoJCQlncmFwaFthcnJbaSsxXV1bYXJyW2ldXT0tMTsKCQkJZGoocGFyLHMsdCxuLGdyYXBoKTsKCQkJaWYobWluPmRpc3QocGFyLHMsdCxncmFwaCkpIHsKCQkJCWNvcHkocDMscGFyLG4pOwoJCX0KCQlncmFwaFthcltqXV1bYXJbaisxXV09YzI7CgkJZ3JhcGhbYXJyW2ldXVthcnJbaSsxXV09YzE7Cgl9Cn0qLwogIAp9