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