MLE求改(我们学校OJ能过)
查看原帖
MLE求改(我们学校OJ能过)
696431
lijunxi1楼主2023/7/11 17:50
#include<bits/stdc++.h>
using namespace std;
bool zg[10005];
struct aa
{
	int x,p;
};
vector<vector<aa> >a;

struct bb
{
	int x,y,p;
	bool operator <(const bb &n)const
	{
		return n.p<p;
	}
}b,c;
int n,m,s,t,s1,s2,s3;
void bfs()
{
	memset(zg,0,sizeof zg);
	if(s==t)
	{
		cout<<"0 ";
		return;
	}
	priority_queue<bb>q;
	zg[s]=1;
	b.x=s;
	for (int i=1;i<=a[s][0].p;i++)
	{
		b.y=a[s][i].x;
		b.p=a[s][i].p;
		q.push(b);
	}
	while(!q.empty())
	{
		b=q.top();
		
		q.pop();
		zg[b.y]=1;
		c.x=b.y;
		if (b.y==t)
		{
			cout<<b.p<<" ";
			return;
		}
		for (int i=1;i<=a[c.x][0].p;i++)
		{
			c.y=a[c.x][i].x;
			c.p=a[c.x][i].p+b.p;
			if (zg[c.y]==0)q.push(c);
		}
	}
	cout<<int(pow(2,31)-1)<<" ";
}
int main ( )
{
	
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>m>>s;a.resize(100005);
	for (int i=1;i<=n;i++)a[i].resize(200005);
	for (int i=1;i<=m;i++)
	{
		cin>>s1>>s2>>s3;
		a[s1][0].p++;
		a[s1][a[s1][0].p].x=s2;
		a[s1][a[s1][0].p].p=s3;
		a[s2][0].p++;
		a[s2][a[s2][0].p].x=s1;
		a[s2][a[s2][0].p].p=s3;
	}
	for (int i=1;i<=n;i++)
	{
		t=i;
		bfs();
	}
}
2023/7/11 17:50
加载中...