大佬们救救36分的蒟蒻吧……
查看原帖
大佬们救救36分的蒟蒻吧……
167235
qszy楼主2020/6/13 16:25

WA了1、3、4、5四个点……

用的是最普通的dij优化

求求大佬们帮忙看一下问题在哪里?

万分感谢!

#include<bits/stdc++.h>
#include<queue>
#define MAX 200000
using namespace std;
bool vis[MAX+5];
int dis[MAX+5];
struct Edge
{
	int to,val;
};

vector<Edge> G[MAX + 5];
struct cmp
{
	bool operator() (Edge x,Edge y)
	{
		return x.val>y.val;
	}
};
priority_queue<Edge,vector<Edge>,cmp> q;
void dij(int s,int n)
{
	for(int i=1;i<=n;i++)
	{
		vis[i]=false;
		dis[i]=0xfffff;
	}
	dis[s]=0;
	Edge now,nxt;
	now.to=s;
	now.val=0;
	q.push(now);
	while(!q.empty())
	{
		now=q.top();
		q.pop();
		if(vis[now.to])
			continue;
		vis[now.to]=true;
		for(int i=0;i<G[now.to].size();i++)
		{
			nxt=G[now.to][i];
			if(now.val+nxt.val<dis[nxt.to])
			{
				dis[nxt.to]=now.val+nxt.val;
				nxt.val=dis[nxt.to];
				q.push(nxt);
			}
		}
	}
}
int main()
{
	int n, m ,s;
	cin>>n>>m>>s;
	Edge now;
	int u;
	while(m--)
	{
		cin >> u >> now.to >> now.val;
		G[u].push_back(now);
	}
	dij(s, n);
	for(int i=1;i<=n;i++)
		cout <<dis[i]<<' ';
	return 0;
}
2020/6/13 16:25
加载中...