HDU1599(Floyd最小环)
Floyd最小环理解+模板:
https://www.cnblogs.com/DF-yimeng/p/8858184.html
除了上述博文里写的,我再补充几点我的理解。
1.为什么先枚举ij求经过ijk的最小环再更新k?
因为更新了K点,dis[i][j]可能会经过K,那么再枚举ij求ijk可能会得到来回相同的路,那么就不是环了。
2.为什么需要两个数组?
一个数组dis[][]表示的是正常从u到v经过k的最短路,
另一个数组mp[][]表示的是不经过k的时候回来的时候的最短路。
通过mp[][]找与k相邻的两个点到k的距离,如下图的情况即找x2和x3到k的距离。通过dis[][]找到与k相邻两点之间的最短距离,如下图的情况即找x2->x3的最短距离。
x1->x2->k->x3->...->x9
HDU1599
https://vjudge.net/problem/HDU-1599
Input第一行是2个整数N和M(N <= 100, M <= 1000),代表景区的个数和道路的条数。
接下来的M行里,每行包括3个整数a,b,c.代表a和b之间有一条通路,并且需要花费c元(c <= 100)。Output对于每个测试实例,如果能找到这样一条路线的话,输出花费的最小值。如果找不到的话,输出"It's impossible.".Sample Input
3 3
1 2 1
2 3 1
1 3 1
3 3
1 2 1
1 2 3
2 3 1
Sample Output
3
It's impossible.
#include<bits/stdc++.h>
using namespace std;
const int inf=1e8;
const int maxn=;
int dis[maxn][maxn];//表示的正常从u到v经过k的最短路
int mp[maxn][maxn];//表示的是不经过k的时候回来的时候的最短路
int n,m,u,v,w;
int i,j,k;
void floyd()
{
int minn=inf;
for(k=;k<=n;k++)
{
for(i=;i<k;i++)
for(j=i+;j<k;j++)
minn=min(minn,dis[i][j]+mp[j][k]+mp[k][i]);
for(i=;i<=n;i++)
for(j=;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
if(minn==inf)
cout<<"It's impossible."<<endl;
else
cout<<minn<<endl;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
for(i=;i<=n;i++)
for(j=;j<=n;j++)
mp[i][j]=dis[i][j]=inf;
//memset(mp,0x3f,sizeof mp);
for(i=;i<=m;i++)
{
cin>>u>>v>>w;
mp[u][v]=mp[v][u]=dis[u][v]=dis[v][u]=min(w,mp[u][v]);
}
floyd();
}
return ;
}
思路:
floyd最小环的模板题。
注意点:
一开始把无穷值设为0x3f3f3f3f,WA了。把值改为1e8或者1e7(>1000(道路最大数)*100(站点最大数))就能AC,至今不明原因。(>人<;)
HDU1599(Floyd最小环)的更多相关文章
- hdoj 1599 find the mincost route【floyd+最小环】
find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- POJ 1734.Sightseeing trip (Floyd 最小环)
Floyd 最小环模板题 code /* floyd最小环,记录路径,时间复杂度O(n^3) 不能处理负环 */ #include <iostream> #include <cstr ...
- HDU - 6080 :度度熊保护村庄 (凸包,floyd最小环)(VJ1900题达成)
pro:二维平面上,给定N个村庄.M个士兵驻守,把村庄围住,现在我们想留下更多的士兵休息,使得剩下的士兵任然满足围住村庄.N,M<500: sol:即是要找一个最小的环,环把村庄围住. 由于是环 ...
- D. Shortest Cycle(floyd最小环)
D. Shortest Cycle time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- floyd最小环&&模板
floyd的核心代码: ;k<=n;k++){ ;i<=n;i++){ ;j<=n;j++){ dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j] ...
- Vijos1046观光旅游[floyd 最小环]
背景 湖南师大附中成为百年名校之后,每年要接待大批的游客前来参观.学校认为大力发展旅游业,可以带来一笔可观的收入. 描述 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它 ...
- HD1599 find the mincost route(floyd + 最小环)
题目链接 题意:求最小环 第一反应时floyd判断,但是涉及到最少3个点,然后就不会了,又想的是 双联通分量,这个不知道为什么不对. Floyd 判断 最小环 #include <iostrea ...
- bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)
1027: [JSOI2007]合金 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2970 Solved: 787[Submit][Status][ ...
- Floyd最小环
本文转自这里 最小环:从一个点出发,经过一条简单路径回到起点成为环.图的最小环就是所有环中长度最小的. 怎样求最小环呢? 1传统的解决方法(dijkstra): 任意一个最小环环的权值, ...
随机推荐
- 悟空模式-java-建造者模式
[此是锻炼神冰铁,磨琢成工光皎洁.老君自己动钤锤,荧惑亲身添炭屑.五方五帝用心机,六丁六甲费周折.造成九齿玉垂牙,铸就双环金坠叶.身妆六曜排五星,体按四时依八节.短长上下定乾坤,左右阴阳分日月.六爻神 ...
- K8s-Demo实现
Kubernates的基础界面 常用的操作 将创建好的yaml文件通过Create按钮创建所需资源项目. Dashbord: 可以通过Dashbord查看集群详情:cpu.memory.f ...
- php面向对象精要(2)
1,self与parent关键字 >self指向当前的类,常用来访问静态成员,方法和常量 >parent指向父类,常用来调用父类的构造函数和方法和成员,也可以用来访问常量 <?php ...
- 华中农业大学第五届程序设计大赛网络同步赛-G
G. Sequence Number In Linear algebra, we have learned the definition of inversion number: Assuming A ...
- scikit-learn画ROC图
1.使用sklearn库和matplotlib.pyplot库 import sklearn import matplotlib.pyplot as plt 2.准备绘图函数的传入参数1.预测的概率值 ...
- Object.assign简单总结
定义 Object.assign方法用来将源对象source的所有可枚举属性复制到目标对象target.至少需要两个对象作为参数,第一个参数为源对象,后面的均为目标对象.(以下用source代指源对象 ...
- jquery判断浏览器的内核
<script type='text/javascript'> $(function(){ if($.browser.msie) { alert("IE浏览器"); } ...
- 火狐hr标签的兼容性问题
想在盒子里加一条白色横线 加了以下代码 页面效果如下<hr style="width:80%;height:1px;border:none;border-top:1px solid # ...
- JavaScript小细节点罗列(2)
break 语句和 continue 语句 break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行. break语句用于跳出代码块或循环. var i = 0; while( ...
- webpack4.x初使用
1.nodejs环境,建议下载v8.2以上版本的,低版本怕是有些api已经废弃,链接附上(https://npm.taobao.org/mirrors/node/) 2.网上一些教程有的是webpac ...