自闭了……调了半个小时也不知道哪错了……
查看原帖
自闭了……调了半个小时也不知道哪错了……
379758
晨曦时雨楼主2021/8/23 22:23
#include<iostream>
#include<queue>
using namespace std;
const int N=50010;
int n,m,k,s,t,tot=0,head[N],dis[N];
bool done[N];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > dij;
struct node{
	int to,val,nxt;
}lu[N];
void add(int a,int b,int c)
{
	tot++;
	lu[tot].to=b;
	lu[tot].val=c;
	lu[tot].nxt=head[a];
	head[a]=tot;
}
void dijj()
{
	for(int i=1;i<=n;i++) dis[i]=2147483646;
	dis[s]=0;
	dij.push(make_pair(0,s));
	while(!dij.empty())
	{
		int front=dij.top().second;
		dij.pop();
		if(done[front]) continue;
		done[front]=true;
		for(int i=head[front];i;i=lu[i].nxt)
		{
			int to=lu[i].to,v=lu[i].val;
			if(!done[to]&&dis[to]>dis[front]+v)
			{
				dis[to]=dis[front]+v;
				dij.push(make_pair(dis[to],to));
			}
		}
	}
}
int main()
{
	cin>>n>>m>>k>>s>>t;
	k++;s++;t++;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
		for(int j=1;j<=k;j++)
		{
			add(x+(j-1)*n,y+j*n,0);
			add(y+(j-1)*n,x+j*n,0);
			add(x+j*n,y+j*n,z);
			add(y+j*n,x+j*n,z);
		}
	}
	dijj();
	int ans=2147483647;
	for(int i=t;i<=k*n;i+=n)
		ans=min(ans,dis[i]);
	cout<<ans;
	return 0;
}

1个AC 4个RE 5个WA

我太南了QAQ

2021/8/23 22:23
加载中...