1 条题解

  • 0
    @ 2026-6-19 10:18:24
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e4+10,K=22;
    #define PII pair<int,int>
    int d[N*K],v[N*K];vector<PII>G[N*K];
    void dij()
    {
    	memset(d,0x3f,sizeof(d));memset(v,0,sizeof(v));
    	priority_queue<PII,vector<PII>,greater<PII>>q;
    	d[1]=0;q.push({0,1});
    	while(!q.empty())
    	{
    		int x=q.top().second;q.pop();
    		if(v[x])continue;v[x]=1;
    		for(auto i:G[x])
    		{
    			int y=i.first,w=i.second;
    			if(d[y]>d[x]+w)
    			{
    				d[y]=d[x]+w;
    				q.push({d[y],y});
    			}
    		}
    	}
    }
    int main()
    {
    	int n,m,k;cin>>n>>m>>k;
    	for(int i=1;i<=m;i++)
    	{
    		int x,y,w;cin>>x>>y>>w;
    		for(int j=0;j<=k;j++)G[x+j*n].push_back({y+j*n,w});
    		for(int j=0;j<=k;j++)G[y+j*n].push_back({x+j*n,w});
    		for(int j=0;j<k;j++)G[x+j*n].push_back({y+(j+1)*n,0});
    		for(int j=0;j<k;j++)G[y+j*n].push_back({x+(j+1)*n,0});
    	}
    	dij();
    	int ans=0x3f3f3f3f;
    	for(int i=1;i<=k+1;i++)ans=min(ans,d[i*n]);
    	cout<<ans;
    	return 0;
    }
    
    • 1

    D75【模板】分层图最短路 Dijkstra 算法[USACO09FEB] Revamping Trails G

    信息

    ID
    871
    时间
    2000ms
    内存
    228MiB
    难度
    5
    标签
    递交数
    27
    已通过
    14
    上传者