当三角不等式的更新变量, 有负数时, 不能写成这样
if(dis[n] == inf) puts("impossible"); else cout << dis[n] << endl;
因为如果有负权边, 在三角不等式更新的时候, 会导致dis[n] < inf
写成这样提高容错率
if(dis[n] > inf / 2) puts("impossible"); else cout << dis[n] << endl;