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         }

 

posted @ 2019-08-19 16:06  滚烫的青春  阅读(216)  评论(0编辑  收藏  举报