import java.util.*;
import java.io.*;
public class Main
{
public static int Vertex=0,Edge=0;
public static ArrayList
<List
>[] Map; public static int[] dist;
{
Vertex
=Integer.
parseInt(st.
nextToken());Edge
=Integer.
parseInt(st.
nextToken()); int start
= Integer.
parseInt(br.
readLine()),i
=0,v1
=0,v2
=0,distance
=0; dist= new int[Vertex+1];
for(i=1;i<=Vertex;i++)
{
Map[i
]=new ArrayList
<>(); }
for(i=0;i<Edge;i++)
{
v1
=Integer.
parseInt(st.
nextToken()); v2
=Integer.
parseInt(st.
nextToken()); distance
=Integer.
parseInt(st.
nextToken()); Map[v1
].
add(new List(v2,distance
)); }
Djikstra(start);
for(i=1;i<=Vertex;i++)
{
else
}
}
public static void Djikstra(int start)
{
int i=0,now=0,now_dist=0,next=0,next_dist=0;
PriorityQueue<List> pq = new PriorityQueue<>();
dist[start]=0;
for(i
=0;i
<Map[start
].
size();i
++) {
now
=Map[start
].
get(i
).
index; now_dist
=Map[start
].
get(i
).
dist;
dist[now]=now_dist;
pq.
add(new List(now,dist
[now
])); }
while(!pq.isEmpty())
{
now=temp.index;
now_dist=dist[now];
for(i
=0;i
<Map[now
].
size();i
++) {
next
=Map[now
].
get(i
).
index; next_dist
=Map[now
].
get(i
).
dist+now_dist
; if(dist[next]>next_dist)
{
dist[next]=next_dist;
pq.
add(new List(next,dist
[next
])); }
}
}
}
}
class List implements Comparable
<List
> {
int index=0;
int dist=0;
{
this.index=index;
this.dist=dist;
}
public int compareTo
(List o
) {
return this.dist<=o.dist?-1:1;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5pby4qOwpwdWJsaWMgY2xhc3MgTWFpbgp7CglwdWJsaWMgc3RhdGljIGludCBWZXJ0ZXg9MCxFZGdlPTA7CglwdWJsaWMgc3RhdGljIEFycmF5TGlzdDxMaXN0PltdIE1hcDsKCXB1YmxpYyBzdGF0aWMgaW50W10gZGlzdDsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpdGhyb3dzIElPRXhjZXB0aW9uIAoJewoJCUJ1ZmZlcmVkUmVhZGVyIGJyPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwoJCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIoYnIucmVhZExpbmUoKSwiICIpOwoJCVZlcnRleD1JbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTtFZGdlPUludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkpOwoJCWludCBzdGFydCA9IEludGVnZXIucGFyc2VJbnQoYnIucmVhZExpbmUoKSksaT0wLHYxPTAsdjI9MCxkaXN0YW5jZT0wOwoJCU1hcCA9IG5ldyBBcnJheUxpc3RbVmVydGV4KzFdOwoJCWRpc3Q9IG5ldyBpbnRbVmVydGV4KzFdOwoJCQoJCWZvcihpPTE7aTw9VmVydGV4O2krKykKCQl7CQoJCQlNYXBbaV09bmV3IEFycmF5TGlzdDw+KCk7CgkJCWRpc3RbaV0gPSBJbnRlZ2VyLk1BWF9WQUxVRS0xOwoJCX0KCQlmb3IoaT0wO2k8RWRnZTtpKyspCgkJewoJCQlzdD1uZXcgU3RyaW5nVG9rZW5pemVyKGJyLnJlYWRMaW5lKCksIiAiKTsKCQkJdjE9SW50ZWdlci5wYXJzZUludChzdC5uZXh0VG9rZW4oKSk7CgkJCXYyPUludGVnZXIucGFyc2VJbnQoc3QubmV4dFRva2VuKCkpOwoJCQlkaXN0YW5jZT1JbnRlZ2VyLnBhcnNlSW50KHN0Lm5leHRUb2tlbigpKTsKCQkJTWFwW3YxXS5hZGQobmV3IExpc3QodjIsZGlzdGFuY2UpKTsKCQl9CgkJRGppa3N0cmEoc3RhcnQpOwoJCWZvcihpPTE7aTw9VmVydGV4O2krKykKCQl7CQoJCQlpZihkaXN0W2ldICE9IEludGVnZXIuTUFYX1ZBTFVFLTEpCgkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZGlzdFtpXSk7CgkJCWVsc2UKCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSU5GIik7CgkJfQoJfQoJcHVibGljIHN0YXRpYyB2b2lkIERqaWtzdHJhKGludCBzdGFydCkKCXsKCQlpbnQgaT0wLG5vdz0wLG5vd19kaXN0PTAsbmV4dD0wLG5leHRfZGlzdD0wOwoJCVByaW9yaXR5UXVldWU8TGlzdD4gcHEgPSBuZXcgUHJpb3JpdHlRdWV1ZTw+KCk7CgkJCgkJZGlzdFtzdGFydF09MDsKCQlmb3IoaT0wO2k8TWFwW3N0YXJ0XS5zaXplKCk7aSsrKQoJCXsJCgkJCW5vdz1NYXBbc3RhcnRdLmdldChpKS5pbmRleDsKCQkJbm93X2Rpc3Q9TWFwW3N0YXJ0XS5nZXQoaSkuZGlzdDsKCQkJCgkJCWRpc3Rbbm93XT1ub3dfZGlzdDsKCQkJcHEuYWRkKG5ldyBMaXN0KG5vdyxkaXN0W25vd10pKTsKCQl9CgkJd2hpbGUoIXBxLmlzRW1wdHkoKSkKCQl7CgkJCUxpc3QgdGVtcCA9IHBxLnBvbGwoKTsKCQkJbm93PXRlbXAuaW5kZXg7CgkJCW5vd19kaXN0PWRpc3Rbbm93XTsKCQkJCgkJCWZvcihpPTA7aTxNYXBbbm93XS5zaXplKCk7aSsrKQoJCQl7CgkJCQluZXh0PU1hcFtub3ddLmdldChpKS5pbmRleDsKCQkJCW5leHRfZGlzdD1NYXBbbm93XS5nZXQoaSkuZGlzdCtub3dfZGlzdDsKCQkJCWlmKGRpc3RbbmV4dF0+bmV4dF9kaXN0KQoJCQkJewoJCQkJCWRpc3RbbmV4dF09bmV4dF9kaXN0OwoJCQkJCXBxLmFkZChuZXcgTGlzdChuZXh0LGRpc3RbbmV4dF0pKTsKCQkJCX0KCQkJfQoJCX0KCX0KfQpjbGFzcyBMaXN0IGltcGxlbWVudHMgQ29tcGFyYWJsZTxMaXN0Pgp7CglpbnQgaW5kZXg9MDsKCWludCBkaXN0PTA7CglMaXN0KGludCBpbmRleCxpbnQgZGlzdCkKCXsKCQl0aGlzLmluZGV4PWluZGV4OwoJCXRoaXMuZGlzdD1kaXN0OwoJfQoJcHVibGljIGludCBjb21wYXJlVG8oTGlzdCBvKQoJewoJCXJldHVybiB0aGlzLmRpc3Q8PW8uZGlzdD8tMToxOwoJfQp9