模板例題:http://oj.hzjingma.com/contest/problem?id=73&pid=9
import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Scanner;
import java.util.Stack;
public class Main {
private static final int inf = 0x3f3f3f;
static int[] dis,vis;
static int n,con;
static int edge;
static Map<String, Integer> m=new HashMap<String, Integer>();
static class e{
int u,v,next,w;
}static e[] es;
static void add(int u,int v, int w) {
if(es[con]==null) es[con]=new e();
es[con].w=w;es[con].v=v;es[con].next=head[u];head[u]=con++;
}
static class p implements Comparable<p>{
int v;int dis;
public int compareTo(p o) {
return this.dis - o.dis;
}
public p(int v,int dis) {
this.v=v;this.dis=dis;
}
}
static PriorityQueue<p> q = new PriorityQueue<p>();
static void Dijikstra(int begin) {
dis[begin]=0;
q.add(new p(begin,0));
while(!q.isEmpty()) {
p temp=q.poll();
if(vis[temp.v]==1)continue;
vis[temp.v]=1;
for(int i=head[temp.v];i!=-1;i=es[i].next){
int v=es[i].v;
if(vis[v]==0 && dis[v]>dis[temp.v]+es[i].w) {
dis[v]=dis[temp.v]+es[i].w;
q.add(new p(v,dis[v]));
}
}
}
// System.out.println(dis[1]);
// System.out.println(dis[2]);
// System.out.println(dis[3]);
// System.out.println(dis[4]);
}
static void init() {
BigInteger a=new BigInteger("2");
BigInteger res =new BigInteger("1");
m.put("1", 0);
for(int i=1;i<=50;i++) {
res=res.multiply(a);
m.put(res.toString(), i);
}
q.clear();con=0;
vis = new int[n+2];
head=new int[n+5];Arrays.fill(head, -1);
dis = new int[n+2]; Arrays.fill(dis, inf);
es=new e[edge*2+2];
}
public static void main(String[] args) {
Scanner sc= new Scanner(new BufferedInputStream(System.in));
n = sc.nextInt();
edge = sc.nextInt();
int begin=sc.nextInt();
int end=sc.nextInt();
init();
for(int i=0;i<edge;i++) {
int t1=sc.nextInt();
int t2=sc.nextInt();
BigInteger temp = sc.nextBigInteger();
int t3=m.get(temp.toString());
add(t1,t2,t3);
}
Dijikstra(begin);
BigInteger t=new BigInteger("2");
if(dis[end]==inf)System.out.println(-1);
else System.out.println( t.pow(dis[end]));
}
}