以下の内容はhttps://snuke.hatenablog.com/entry/2013/03/01/152108より取得しました。


Dijkstraの定数倍

ダイクストラ

dijkstra(){
	distをINFで初期化
	usedをfalseで初期化
	優先順位つきキューに[0,始点]を突っ込む
	while(キューが空になるまで){
		キューの先頭を取り出す
		dに距離を代入 vに頂点を代入
		if(used[v] == true) continue
		used[v] = true
		dist[v] = d
		for(vから出る辺eを全部){
			if(辺の容量が正) キューに[d+e.cost, e.to]を突っ込む
		}
	}
}

みたいに書くと正しく動きますが、以下のような枝狩りのようなものがあるかないかによって10倍近くの定数倍の差が出ることがあるようです。

dijkstra(){
	distをINFで初期化 dist[始点]は0
	usedをfalseで初期化
	優先順位つきキューに[0, 始点]を突っ込む
	while(キューが空になるまで){
		キューの先頭を取り出す
		dに距離を代入 vに頂点を代入
		if(used[v] == true) continue
		used[v] = true
		for(vから出る辺eを全部){
			if(辺の容量が正 && d+e.cost < dist[e.to]){
				dist[e.to] = d+e.cost
				キューに[d+e.cost, e.to]を突っ込む
			}
		}
	}
}

これのせいで昨日のCFのEがTLEして悲しかった。
こんなに差が出る物なんですね・・・




以上の内容はhttps://snuke.hatenablog.com/entry/2013/03/01/152108より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14