社区讨论

dijkstra做的,不TLE,但全点WA,求助大佬

P1629邮递员送信参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lp5n47s7
此快照首次捕获于
2023/11/19 23:36
2 年前
此快照最后确认于
2023/11/20 14:24
2 年前
查看原帖
代码↓
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<ll,ll>
#define w first
#define s second
const int N=5e5+5;
ll dis[N];
ll g[2001][2001];
ll g2[2001][2001];
bool vis[N];
ll n,m;
inline ll read()
{
	ll ans=0,f=1;
	char x=getchar();
	while(x<'0' || x>'9')
	{
		if(x=='-') f=-1;
		x=getchar();
	}
	while(x>='0' && x<='9')
	{
		ans=(ans<<3)+(ans<<1)+x-'0';
		x=getchar();
	}
	return ans*f;
}
void ds(ll x)
{
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	priority_queue<P,vector<P>,greater<P> > q;
	dis[x]=0;
	q.push({0,x});
	while(q.size())
	{
		P cur=q.top();
		q.pop();
		if(vis[cur.s]) continue;
		vis[cur.s]=1;
		for(int i=1;i<=n;i++)
		{
			if(g[cur.s][i]!=0x3f)
			{
				if(dis[i]>g[cur.s][i]+cur.w)
				{
					dis[i]=g[cur.s][i]+cur.w;
					q.push({dis[i],i});
				}
			}
		}
	}
}
void ds2(ll x)
{
	memset(dis,0x3f,sizeof(dis));
	memset(vis,0,sizeof(vis));
	priority_queue<P,vector<P>,greater<P> > q;
	dis[x]=0;
	q.push({0,x});
	while(q.size())
	{
		P cur=q.top();
		q.pop();
		if(vis[cur.s]) continue;
		vis[cur.s]=1;
		for(int i=1;i<=n;i++)
		{
			if(g2[cur.s][i]!=0x3f)
			{
				if(dis[i]>g2[cur.s][i]+cur.w)
				{
					dis[i]=g2[cur.s][i]+cur.w;
					q.push({dis[i],i});
				}
			}
		}
	}
}
int main()
{
	memset(g,0x3f,sizeof(g));
	memset(g2,0x3f,sizeof(g2));
	n=read();
	m=read();
	for(int i=1;i<=m;i++)
	{
		ll u,v,w;
		u=read();
		v=read();
		w=read();
		g[u][v]=w;
		g2[v][u]=w;
	}
	ll ans=0;
	ds(1);
	for(int i=2;i<=n;i++) ans+=dis[i];
	ds2(1);
	for(int i=2;i<=n;i++) ans+=dis[i];
	printf("%d\n",ans);
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...