HDU1599
来源:互联网 发布:mac dock栏叠加图标 编辑:程序博客网 时间:2024/05/09 00:59
这道题题意很简单,就是求最小环。如果用最朴素的最短路解决,复杂度很高。怎么办?用Floyed解决,枚举每一个点K,和连接它的两个点i,j(i,j均<k),使i,j,k构成环。则ans=min{ans,dis[i][j]+g[k][i]+g[k][j]},根据Floyed原理,若i,j<k则dis[i][j]与k无关。所以要现计算最值,在做更新。此外,若输入格式给出的是边权的形式,一定注意重边问题,这点很坑爹!!!
#include <iostream>using namespace std;const int N=110;int dis[N][N],g[N][N];const int MAX=0xfffffff;int gmin(int x,int y){ if (x>y) return y; else return x;}int main(){ int n,m,i,j,k; int Max=MAX/10; while (scanf("%d%d",&n,&m)!=EOF) { int x,y,z,ans=Max; for (i=1;i<=n;i++) for (j=1;j<=n;j++) g[i][j]=Max; while (m--) { scanf("%d%d%d",&x,&y,&z); if (z<g[x][y]) g[x][y]=g[y][x]=z; } for (i=1;i<=n;i++) for (j=1;j<=n;j++) dis[i][j]=g[i][j]; for (k=1;k<=n;k++) { for (i=1;i<k;i++) for (j=i+1;j<k;j++) ans=gmin(ans,dis[i][j]+g[k][i]+g[k][j]); for (i=1;i<=n;i++) for (j=1;j<=n;j++) dis[i][j]=gmin(dis[i][j],dis[i][k]+dis[k][j]); } if (ans==Max) printf("It's impossible.\n"); else printf("%d\n",ans); } return 0;}
- HDU1599
- hdu1599
- hdu1599
- hdu1599
- HDU1599
- hdu1599+floyd最小环
- hdu1599 最小环问题
- HDU1599 find the mincost route
- hdu1599 find the mincost route
- hdu1599 floyd 求最小环
- hdu1599 find the mincost route
- hdu1599(floyd算法讲解)
- hdu1599 find the mincost route
- 最小环 hdu1599 Floyd算法
- HDU1599:find the mincost route
- hdu1599 find the mincost route
- [hdu1599]find the mincost route
- hdu1599——find the mincost route
- iphone"此证书是由未知颁发机构签名的"的解决办法
- Android的Bitmap内存溢出解决方案(OOM) 整理总结
- 真机调试报The executable was signed with invalid entitlements.错误
- 分享共筑 : 伟大的理念
- SocketException四大异常解决方案
- HDU1599
- 苹果开发者账号注册、申请续费整个流程
- Symmetric Order (P2013)
- Oracle ERP DBA 主要工作职责
- struts2 的 注解
- 我的第一个Android应用软件——《飞鸟集》
- STL 数值极限 辅助函数 <cstddef ><cstdlib>
- 杨辉三角
- Hibernate3 注解