奇怪的TLE,悬关求调
查看原帖
奇怪的TLE,悬关求调
752711
hateful_bug楼主2024/7/29 14:39

T了第三个点

#include<bits/stdc++.h>
using namespace std;
const int N=150010;
int n,m,k;
int h[20510],b[N],nx[N],v[N],tt,dis[20510],ans=0x3f3f3f3f;
bool pd[N];
void zj(int x,int y,int z)
{
	b[++tt]=y;
	v[tt]=z;
	nx[tt]=h[x];
	h[x]=tt;
}
void dji()
{
	priority_queue<pair<int,int> > q;
	memset(dis,0x3f3f3f3f,sizeof(dis));
	q.push({0,1});
	dis[1]=0;
	while(!q.empty())
	{
		int x=q.top().second;
		q.pop();
		if(pd[x])
		continue;
		pd[x]=true;
		for(int i=h[x];i;i=nx[i])
		{
			int y=b[i],z=v[i];
			if(dis[y]>dis[x]+z)
			{
				dis[y]=dis[x]+z;
				q.push({-dis[y],y});
			}
		}
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		for(int j=0;j<=k;j++)
		zj(x+j*n,y+j*n,z),zj(y+j*n,x+j*n,z);
		for(int j=0;j<k;j++)
		zj(x+j*n,y+(j+1)*n,z/2),zj(y+j*n,x+(j+1)*n,z/2);
	}
	dji();
	for(int i=1;i<=k+1;i++)
	ans=min(ans,dis[i*n]);
	printf("%d",ans);
	return 0;
}
2024/7/29 14:39
加载中...