1 条题解

  • 0
    @ 2025-9-10 8:49:47

    C++ :

    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    int n,m,k,tot,x,y,z,first[10005],dis[10005][12],v[10005][12],qi,zh;
    struct bian
    {
    	int from,to,next,fare;
    }s[100005];
    void add(int x,int y,int z)
    {
    	s[++tot].from=x;
    	s[tot].to=y;
    	s[tot].fare=z;
    	s[tot].next=first[x];
    	first[x]=tot;
    }
    struct data
    {
    	int q,t,jvli;
    	friend bool operator < (data a,data b)
    	{
    		return a.jvli>b.jvli;
    	}
    }cc,cd;
    priority_queue<data>q;
    void spfa(int x)
    {
    	memset(dis,50,sizeof(dis));
    	memset(v,0,sizeof(v));
    	cc.q=x;
    	cc.jvli=0;
    	cc.t=0;
    	v[x][0]=1;
    	q.push(cc);
    	dis[x][0]=0;
    	while(!q.empty())
    	{
    		cd=q.top();
    		v[cd.q][cd.t]=0;
    		q.pop();
    		for(int i=first[cd.q];i!=-1;i=s[i].next)
    		{
    			int j=s[i].to;
    			if(cd.t+1<=k)
    			{
    				if(dis[j][cd.t+1]>dis[cd.q][cd.t])
    				{
    					dis[j][cd.t+1]=dis[cd.q][cd.t];
    					if(!v[j][cd.t+1])
    					{
    						v[j][cd.t+1]=1;
    						cc.q=j;
    						cc.jvli=dis[j][cd.t+1];
    						cc.t=cd.t+1;
    						q.push(cc);
    					}
    				}
    			}
    			if(dis[j][cd.t]>dis[cd.q][cd.t]+s[i].fare)
    			{
    				dis[j][cd.t]=dis[cd.q][cd.t]+s[i].fare;
    				if(!v[j][cd.t])
    				{
    					v[j][cd.t]=1;
    					cc.q=j;
    					cc.jvli=dis[j][cd.t];
    					cc.t=cd.t;
    					q.push(cc);
    				}
    			}
    		}
    	}
    }
    int minc(int a,int b){return a<b?a:b;}
    int main()
    {
    	//freopen("meg.in","r",stdin);
    	//freopen("meg.out","w",stdout);
    	memset(first,-1,sizeof(first));
    	scanf("%d%d%d%d%d",&n,&m,&k,&qi,&zh);
    	qi++,zh++;
    	for(int i=1;i<=m;++i)
    	{
    		scanf("%d%d%d",&x,&y,&z);
    		x++,y++;
    		add(x,y,z);
    		add(y,x,z);
    	}
    	spfa(qi);
    	int ans=0x7fffffff;
    	for(int i=0;i<=k;++i)
    		ans=minc(dis[zh][i],ans);
    	printf("%d",ans);
    	//while(1);
    }/*
    5 6 1 0 4 0 1 5 1 2 5 2 3 5 3 4 5 2 3 3 0 2 100
    */
    
    
    • 1

    信息

    ID
    3331
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者