题目连接:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2155&cid=1430

题意:输入一个n个节点,m条边的图,然后k条记录,纪录可能为:

0 x:添加上x这个节点;

1 x y :输出从x到y的最短路;

思路:floyd;

使我更加了解了floyd的思想,就是每加入一个点,更新一次最短路。

 #include <bits/stdc++.h>
using namespace std;
#define INF 1<<29
#define repu(i,a,b) for(int i=a;i<b;i++)
#define N 500
int vis[N],p[N][N];
int main()
{
int n,m,k,kase = ;
while(scanf("%d%d%d",&m,&n,&k)&&m&&n&&k)
{
printf("Case %d:\n",kase++);
memset(vis,,sizeof(vis));
int u,v,d,a,b,st,ed;
repu(i,,m)
{
repu(j,,m)
p[i][j] = INF;
p[i][i]=;///坑啊,一定得记住啊
}
repu(i,,n)
{
scanf("%d%d%d",&u,&v,&d);
if(p[u][v] > d)
p[u][v] = d;
}
while(k--)
{
scanf("%d",&a);
if(a==)
{
scanf("%d%d",&st,&ed);
if(!vis[st] || !vis[ed])
printf("City %d or %d is not available.\n",st,ed);
else
{
if(p[st][ed] != INF)
printf("%d\n",p[st][ed]);
else
printf("No such path.\n");
}
}
else
{
scanf("%d",&b);
if(vis[b])
printf("City %d is already recaptured.\n",b);
else
{
vis[b] = ;
///更新所有以b为过路点的最小值
repu(i,,m)
repu(q,,m)
p[i][q] = min(p[i][q],p[i][b]+p[b][q]);
}
}
}
printf("\n");
}
return ;
}

最新文章

  1. C++ 面向对象编程
  2. HDU 1850 Being a Good Boy in Spring Festival
  3. Visual Studio小技巧
  4. jquery升级换代
  5. Symfony3 更改生成CRUD目录步骤
  6. android 一些数据转换方法
  7. C++风格写判断某年某月某日是一年的第几天
  8. gradle入门(1-8)gradle 的依赖查看、依赖排除和指定版本(需要验证!)
  9. Redis集群教程(Redis cluster tutorial)
  10. [论文解读]CNN网络可视化——Visualizing and Understanding Convolutional Networks
  11. &lt;抽象工厂&gt;比&lt;工厂方法&gt;多了啥
  12. 关于new你应当知道的一切
  13. 我们一起踩过的坑----react(antd)(二)
  14. Linux技术图谱
  15. Linux - YUM包管理
  16. Image Restoration[Deep Image Prior]
  17. Mac为python2.7.10安装pip
  18. git 生成秘钥
  19. Java常用的非受检异常
  20. MySQL之SQL语句零碎总结

热门文章

  1. Pictures of Ascii Art
  2. hdu 2818 Building Block
  3. mongodb的安装及注意事项
  4. jQuery性能优化指南(转载)
  5. input固定定位后,当input框获取到焦点时,会离开手机软键盘的解决方法
  6. UESTC 2016 Summer Training #6 Div.2
  7. XAML-1
  8. JBoss JMX登录需要用户名密码的解决办法
  9. 项目管理办公室 PMO
  10. S1:原型继承