两个TLE,一个WA,跪求大佬
查看原帖
两个TLE,一个WA,跪求大佬
529468
BlinkSwiftie楼主2023/8/5 21:38
#include<bits/stdc++.h>
#define pii pair<int,int>
using namespace std;
const int N=3e5+1,M=5e5+1;
int n,m,k,s,t,a,b,c;
int head[M],nex[M],to[M],val[M],cnt;
int dis[N];
bool vis[N];
void addedge(int u,int v,int w)
{
	nex[++cnt]=head[u];
	to[cnt]=v;
	head[u]=cnt;
	val[cnt]=w;
}
void dijkstra()
{
	memset(dis,0x3f3f3f3f,sizeof(dis));
	dis[s]=0;
	priority_queue<pii,vector<pii >,greater<pii > > q;
	q.push(make_pair(0,s));
	while(!q.empty())
	{
		int x=q.top().second;
		q.pop();
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=head[x];i;i=nex[i])
		{
			int v=to[i];
			if(dis[v]>dis[x]+val[i])
			{
				dis[v]=dis[x]+val[i];
				q.push(make_pair(dis[v],v));
			}
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	scanf("%d%d",&s,&t);
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d%d",&a,&b,&c);
		addedge(a,b,c);
		addedge(b,a,c);
		for(int j=1;j<=k;++j)
		{
			addedge(a+n*j,b+n*j,c);
			addedge(b+n*j,a+n*j,c);
			addedge(a+n*(j-1),b+n*j,0);
			addedge(b+n*(j-1),a+n*j,0);
		}
	}
	dijkstra();
	int ans=0x3f3f3f3f;
	for(int i=0;i<=k;++i) ans=min(ans,dis[i*n+t]);
	cout<<ans<<endl;
	return 0;
}
2023/8/5 21:38
加载中...