- 货车运输
 - @ 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
 - 分类
 - (无)
 - 标签
 - 递交数
 - 5320
 - 已通过
 - 955
 - 通过率
 - 18%
 - 被复制
 - 10
 - 上传者