简单最短路求助
  • 板块灌水区
  • 楼主luxiaomao
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/12 17:18
  • 上次更新2023/11/12 19:40:06
查看原帖
简单最短路求助
1037502
luxiaomao楼主2023/11/12 17:18

P1608 路径统计

WA成68pts,感觉自己应该错得很弱智,但是看不出来哪里有问题,求教 dalao 们。

code:

#include<bits/stdc++.h>
#define int long long
#define inf (long long)1e18
using namespace std;

int n,m;
int mp[2005][2005];

int dis[2005],ans[2005];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;

void dijkstra()
{
	for(int i = 1;i <= n;i++)dis[i] = inf;
	dis[1] = 0;
	ans[1] = 1;
	q.push(make_pair(0,1));
	while(!q.empty())
	{
		int u = q.top().second;
		q.pop();
		for(int v = 1;v <= n;v++)
		{
			int w = mp[u][v];
			if(dis[u] + w < dis[v])
			{
				dis[v] = dis[u] + w;
				ans[v] = ans[u];
				q.push(make_pair(dis[v],v));
			}
			else if(dis[u] + w == dis[v])
				ans[v] += ans[u];
		}
	}
	return;
}

signed main()
{
	freopen("in.txt","r",stdin);
	scanf("%lld%lld",&n,&m);
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= n;j++)
			mp[i][j] = inf;
	while(m--)
	{
		int u,v,w;
		scanf("%lld%lld%lld",&u,&v,&w);
		if(w < mp[u][v])mp[u][v] = w;
	}
	dijkstra();
	if(dis[n] == inf)
		printf("No answer");
	else
		printf("%lld %lld",dis[n],ans[n]);
	return 0;
}
2023/11/12 17:18
加载中...