- 小岛
- 2016-10-13 17:09:46 @
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define inf 99999999
int m,n;
int dis[1004],a[1004][1004],b[80],book[1004],s[50000];
void athletic(int x,int y)
{
int k,l,v,min;
for(k=1;k<=n;k++)
{
book[k]=0;
dis[k]=a[k][y];
}
for(k=1;k<=n-1;k++)
{
min=inf;
for(l=1;l<=n;l++)
{
if(dis[l]<min && book[l]==0)
{
min=dis[l];
v=l;
}
}
book[v]=1;
for(l=1;l<=n;l++)
{
if(a[l][v]<inf)
{
if(dis[l]>dis[v]+a[v][l])
dis[l]=dis[v]+a[v][l];
}
}
}
return ;
}
int main()
{
scanf("%d%d",&n,&m);
int i,j,p=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
a[i][j]=inf;
}
}
for(i=1;i<=m;i++)
{
scanf("%d",&b[1]);
if(b[1]==0)
{ p++;
scanf("%d %d",&b[2],&b[3]);
athletic(b[2],b[3]);
s[p]=dis[b[2]];
}
if(b[1]==1)
{
scanf("%d %d %d",&b[2],&b[3],&b[4]);
if(a[b[2]][b[3]]>b[4])
{
a[b[2]][b[3]]=b[4];
a[b[3]][b[2]]=b[4];
}
}
}
for(i=1;i<=p;i++)
{
if(s[i]<inf) printf("%d\n",s[i]);
else printf("-1\n");
}
return 0;
}
1 条评论
-
覃子睿 LV 7 @ 2016-10-14 21:18:01
n*m=50000000....
- 1
信息
- ID
- 1942
- 难度
- 6
- 分类
- (无)
- 标签
- 递交数
- 690
- 已通过
- 188
- 通过率
- 27%
- 被复制
- 2
- 上传者