分层图WA#3#4#7#8#9求调,悬关,感谢qwq
查看原帖
分层图WA#3#4#7#8#9求调,悬关,感谢qwq
467775
2333?楼主2023/10/14 17:31
#include <bits/stdc++.h>
#include <queue>
using namespace std;
#define N 20005
#define add(u,v,w) e[u].push_back(node(v,w));
int n,m,k,st,ed,ans;
struct node{
	int w,v;
	node(){}
	node(int vv,int ww):w(ww),v(vv){};
};
struct node2{
	int d,u;
	node2(int dd,int uu):d(dd),u(uu){};
};
bool operator < (node2 a,node2 b)
{
	return a.d>b.d;
}
vector<node> e[N*11];
bool vst[N*11];
int d[N*11];
priority_queue<node2> q;
void dij()
{
	memset(d,63,sizeof(d));
	d[st]=0;
	q.push(node2(0,st));
	while(!q.empty())
	{
		int u=q.top().u;q.pop();
		if(vst[u]) continue;
		vst[u]=1;
		for(auto i:e[u])
			if(d[i.v]>d[u]+i.w)
			{
				d[i.v]=d[u]+i.w;
				q.push(node2(d[i.v],i.v));
			}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m>>k;
	cin>>st>>ed;
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		add(u,v,w);
		add(v,u,w);
		for(int j=1;j<=k;j++)
		{
			add(u,n*j+v,0);
			add(v,n*j+u,0);
			add(n*j+u,n*j+v,w);
			add(n*j+v,n*j+u,w);
		}
	}
	dij();
	int ans=INT_MAX;
	for(int j=0;j<=k;j++)
		ans=min(d[ed+n*j],ans);
	cout<<ans;
	return 0;
}
2023/10/14 17:31
加载中...