急求调分层图模板,悬2关
  • 板块灌水区
  • 楼主ChenZQ
  • 当前回复12
  • 已保存回复12
  • 发布时间2024/2/25 20:14
  • 上次更新2024/2/26 09:46:02
查看原帖
急求调分层图模板,悬2关
745358
ChenZQ楼主2024/2/25 20:14
#include <bits/stdc++.h>
using namespace std;

const int N = 4000010;
int h[N],e[N],w[N],ne[N],idx=0;
void add(int a,int b,int c)
{
	e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
int n,m,k;
int dist[N];
struct node
{
	int step,u;
	bool operator < (const node&cmp) const
	{
		return step>cmp.step;
	}
};
int s,t;
priority_queue<node> q;
bool flag[N];
void dijkstra()
{
	q.push({0,s});
	memset(dist,0x3f,sizeof dist);
	dist[s]=0;
	
	while(!q.empty())
	{
		node f=q.top();
		q.pop();
		
		if(flag[f.u]) continue;
		flag[f.u]=1;
		for(int i=h[f.u];i!=-1;i=ne[i])
		{
			if(!flag[e[i]] && dist[f.u]+w[i]<dist[e[i]])
			{
				dist[e[i]]=dist[f.u]+w[i];
				q.push({dist[e[i]],e[i]});
			}
		}
	}
	printf("%d",dist[t+n*k]);
}
int main()
{
	memset(h,-1,sizeof h);
	scanf("%d%d%d",&n,&m,&k);
	scanf("%d%d",&s,&t);
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		add(a,b,c);
		add(b,a,c);
		for(int j=1;j<=k;j++) add(a+n*(j-1),b+n*j,0),add(b+n*j,a+n*(j-1),0),add(a+n*j,b+n*j,c),add(b+n*j,a+n*j,c);
	}
	for(int i=1;i<=k;++i)
	{
		add(t+(i-1)*n,t+i*n,0);
	}
	dijkstra();
}

https://www.luogu.com.cn/problem/P4568

2024/2/25 20:14
加载中...