- 货车运输
- 2017-03-02 21:16:59 @
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10001
#define M 50001
#define Q 30001
#define Z 100001
#define inf 0x3f3f3f3f
using namespace std;
struct node
{
int x,next,w;
};
node data[M*2];
int g[N],d[N],v[N];
int tot,n,m,qu;
void addedge(int x,int y,int k)
{
tot++;
data[tot].x=y;
data[tot].w=k;
data[tot].next=g[x];
g[x]=tot;
}
void prim(int st)
{
for (int i=1;i<=n;i++) d[i]=-1;
d[st]=0;
memset(v,0,sizeof(v));
for (int time=1;time<=n-1;time++)
{
int maxn=-1,maxp;
for (int i=1;i<=n;i++)
{
if (d[i]>maxn)
{
maxn=d[i];
maxp=i;
}
}
v[maxp]=1;
for (int p=g[maxp];p!=-1;p=data[p].next)
{
if (maxp==st)
{
d[data[p].x]=data[p].w;
}
else if (v[data[p].x]==0 && d[data[p].x]<min(d[maxp],data[p].w))
{
d[data[p].x]=min(d[maxp],data[p].w);
}
}
}
}
int main()
{
freopen("vijos1843.in","r",stdin);
scanf("%d%d",&n,&m);
tot++;
memset(g,255,sizeof(g));
for (int i=1;i<=m;i++)
{
int x,y,k;
scanf("%d%d%d",&x,&y,&k);
addedge(x,y,k);
addedge(y,x,k);
}
scanf("%d",&qu);
for (int i=1;i<=qu;i++)
{
int st,et;
scanf("%d%d",&st,&et);
prim(st);
/*if (d[et]!=-1)*/ printf("%d\n",d[et]);
//else printf("-1\n");
}
return 0;
}
0 条评论
信息
- ID
- 1843
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 5319
- 已通过
- 954
- 通过率
- 18%
- 被复制
- 10
- 上传者