蒟蒻求助!!!有奖!!!
  • 板块P1608 路径统计
  • 楼主yyc_qwq
  • 当前回复11
  • 已保存回复11
  • 发布时间2023/1/6 16:58
  • 上次更新2023/10/24 05:22:57
查看原帖
蒟蒻求助!!!有奖!!!
487959
yyc_qwq楼主2023/1/6 16:58
#include<bits/stdc++.h>
using namespace std;
const long long N=100005;
const long long inf=0x3f3f3f3f3f3f3f3f;
struct edge 
{
	long long v, w;
};

struct node {
	long long dis, u;
	bool operator>(const node& a) const { return dis > a.dis; }
};

vector<edge> e[N];
long long dis[N], vis[N],cnt[N];
priority_queue<node, vector<node>, greater<node> > q;

void dijkstra(long long n, long long s) 
{
	memset(dis, 63, sizeof(dis));
	dis[s] = 0;
	q.push({0, s});
	while (!q.empty()) 
	{
    	long long u = q.top().u;
    	q.pop();
    	if (vis[u]) continue;
    	vis[u] = 1;
    	for (auto ed : e[u]) 
    	{
    		long long v = ed.v, w = ed.w;
    		if (dis[v] > dis[u] + w) 
    		{
        		dis[v] = dis[u] + w;
        		cnt[v] = cnt[u];
        		q.push({dis[v], v});
    		}else if (dis[v] == dis[u] + w){
        		cnt[v] = cnt[v]+cnt[u];
    		}
    	}
	}
}

int main()
{
    long long n,m;
    cin >> n >> m;
    for (long long i = 1; i <= m; i++)
    {
    	long long u,v,w;
    	cin >> u >> v >> w;
		e[u].push_back({v,w});
    }
    cnt[1] = 1;
    dijkstra(n,1);
    if(dis[n]==4557430888798830399){
    	cout << "No answer" << endl;
    }else{
    	cout << dis[n] << ' ' << cnt[n] << endl;
    }
    return 0;
}

奖一个关注~~~

2023/1/6 16:58
加载中...