蒟蒻求助
查看原帖
蒟蒻求助
315619
ikun_fjh楼主2023/7/17 23:17
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;

struct Node{
	int y , w;
};
bool operator > (Node a , Node b)
{
	if(a.w > b.w)
		return true;
	if(a.w < b.w)
		return false;
}
bool operator < (Node a , Node b)
{
	if(a.w < b.w)
		return true;
	if(a.w < b.w)
		return false;
}

const int N = 5e4+5;
int m , n , k , sx , fx;
int x , y , w;
int d[N];
bool vis[N];
vector<Node> g[N];
void dijkstra()
{
	memset(d , 0x3f , sizeof(d));
	d[sx] = 0;
	priority_queue<Node , vector<Node> , greater<Node> > q;
	q.push((Node){sx , 0});
	while(!q.empty())
	{
		Node n = q.top();
		q.pop();
		//vis
		int x = n.y;
		vis[x] = true;
		for(int i = 0 ; i < g[x].size() ; i++)
		{
			Node t = g[x][i];
			int y = t.y;
			int w = t.w;
			if(d[x] + w < d[y])
			{
				d[y] = d[x] + w;
				if(vis[y])
				{
					continue;
				}
				q.push((Node){y , d[y]});
			}
			
		}
		//
	}
	
}
int main()
{
	scanf("%d%d" , &n , &m);
	for(int i = 1 ; i <= m ; i++)
	{
		scanf("%d%d%d" , &x , &y , &w);
		g[x].push_back((Node){y , w});
		g[y].push_back((Node){x , w});
	}
	scanf("%d" , &k);
	for(int i = 1 ; i <= k ; i++)
	{
		scanf("%d%d" , &x , &y);
		for(int j = 1 ; j <= g[x].size() ; j++)
		{
			if(g[x][i].y == y)
			{
				g[x][i].w = 0;
			}
		}
		for(int j = 1 ; j <= g[x].size() ; j++)
		{
			if(g[y][i].y == x)
			{
				g[y][i].w = 0;
			}
		}
	}
	scanf("%d%d" , sx , fx);
	dijkstra();
	//cout << "sda" ;
	printf("%d" , d[fx]);
	return 0;
}

求助dalao,为什么不能输出?感觉dijkstra打的没错啊?

2023/7/17 23:17
加载中...