求各位大佬帮帮我这个只得54分的蒟蒻吧
查看原帖
求各位大佬帮帮我这个只得54分的蒟蒻吧
19228
蒟蒻炒扇贝楼主2020/8/20 11:15
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
struct edge
{
	int nxt,v,w;
}a[100005];
int n,m,cnt,head[100005],dis[100005],ans[100005],vis[100005],mp[2005][2005];
void addedge(int u,int v,int w)
{
	a[++cnt].v=v;
	a[cnt].w=w;
	a[cnt].nxt=head[u];
	head[u]=cnt;
}
queue<int>q;
void spfa()
{
	q.push(1);
	memset(dis,0x3f,sizeof(dis));
	vis[1]=1;
	dis[1]=0;
	ans[1]=1;
	while(!q.empty())
	{
		int now=q.front();
		q.pop();
		vis[now]=0;
		for(int i=head[now];i;i=a[i].nxt)
		{
			int to=a[i].v;
			if(dis[to]>dis[now]+a[i].w)
			{
				dis[to]=dis[now]+a[i].w;
				ans[to]=ans[now];
				if(!vis[to])
				{
					q.push(to);
					vis[to]=1;
				}
			}
			else if(dis[to]==dis[now]+a[i].w)
			{
				ans[to]+=ans[now];
				if(!vis[to])
				{
					q.push(to);
					vis[to]=1;
				}
			}
		}
		if(now!=n)ans[now]=0;
	}
}
int main()
{
	cin>>n>>m;
	memset(mp,0x3f,sizeof(mp));
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		cin>>u>>v>>w;
		if(w<mp[u][v])
		{
			mp[u][v]=w;
			addedge(u,v,w);
		}
	}
	spfa();
	if(dis[n]==1061109567)
		cout<<"No answer";
	else
		cout<<dis[n]<<" "<<ans[n];
	return 0;
}

RT,本蒟蒻是真的检查不出来有什么问题了。。。

2020/8/20 11:15
加载中...