frogger (一题多解)
分析:这个题是我见过最神奇的一道图论题了,从不同的角度可以有不同的解法:
1、Floyd:第三层循环内部的松弛操作变式为:dis[i][j] = min(dis[i][j], max(dis[i][k], dis[k][j]));
2、dijkstra:dist[j]=min(dist[j],max(dist[u],mp[u][j]));
3、最小生成树:
1 for(int i=0;i<cnt;i++) 2 { 3 int u=e[i].from,v=e[i].to; 4 int xx=Find(u); 5 int yy=Find(v); 6 if(xx!=yy) 7 { 8 f[xx]=yy; 9 if(Find(0)==Find(1))//两点已经连通了,就输出当前最大边 10 { 11 ans=e[i].w;//接入的最后一条使得2与1连通的边 12 break; 13 } 14 } 15 }