抱灵求助
查看原帖
抱灵求助
94726
萧道成楼主2021/8/15 12:06
#include <bits/stdc++.h>
#define ll long long
#define N 200001
#define INF 0x3f3f3f3f
using namespace std;
ll tot1,tot2,n,m,ans,sum,head1[N],vis[N],t[N];
ll dfn[N],sta[N],low[N],ind,att,head2[N],top,k,num,cnt,fa[N];
ll val[N],al[N],c[N],f[N],dis[N];
ll xx[N],yy[N],zz[N];
struct node{
	ll u,v,ino,w;
}e1[N],e2[N];
void add(ll x,ll y,ll z)
{
	tot1++;
	e1[tot1].u=head1[x];
	e1[tot1].v=y;
	head1[x]=tot1;
	//e[tot].u=x;
	//e[tot].v=y;
	e1[tot1].w=z;
}
void spfa(ll x)
{
	queue<ll>q;
	while(!q.empty()) 
	q.pop();
	for(ll i=1;i<=n;i++)
	{
		vis[i]=0;
		dis[i]=INF;
	}
	dis[x]=0;
	vis[x]=1;
	q.push(x);
	while(!q.empty())
	{
		ll u=q.front();
		q.pop();
		vis[u]=0;
		for(ll i=head1[u];i;i=e1[i].u)
		{
			ll v=e1[i].v;
			if(dis[v]>dis[u]+e1[i].w)
			{
				dis[v]=dis[u]+e1[i].w;
				if(!vis[v])
				{
					q.push(v);
					vis[v]=1;
				}
			}
		}
	}
}
int main()
{
	ll ju;
	ll ans1=0,ans2=0;
	cin>>n>>m>>ju;
	for(ll i=1;i<=m;i++)
	{
		cin>>xx[i]>>yy[i]>>zz[i];
	
	}	
	for(ll i=1;i<=m;i++)
	add(xx[i],yy[i],zz[i]);
	spfa(ju);	
	for(ll i=1;i<=n;i++)	
	//cout<<dis[i]<<endl;
	ans1=max(ans1,dis[i]);
	
	memset(e1,0,sizeof(e1));
	memset(head1,0,sizeof(head1));
	tot1=0;

	for(ll i=1;i<=m;i++)
	{
		add(yy[i],xx[i],zz[i]);
	}
	spfa(ju);
//	for(ll i=1;i<=n;i++)

	//ans2=max(ans2,dis[i]);
	
	cout<<max(ans1,ans2);
	return 0;
}
、、连样例都过不了,怎么改
2021/8/15 12:06
加载中...