关于P3371
  • 板块灌水区
  • 楼主_LiHX
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/3/4 19:23
  • 上次更新2023/10/28 07:19:20
查看原帖
关于P3371
340137
_LiHX楼主2022/3/4 19:23

哪位大佬帮忙看看为什么#3#9#10TLE了

#include <bits/stdc++.h>
#define ll long long
#define _debug(x) printf("[DEBUG] %d\n",x);

using namespace std;

const int inf=pow(2,31)-1;
int n , m , s ;
int cnt , fr[200010] , nxt[200010] , to[200010] , w[200010];
bool vis[200010] ;
ll dis[200010] ;

inline int Fr()
{
    int x=0 , f=1 ;
    char c=getchar();
    while( c<'0' || c>'9' )
    {
        if(c=='-')
        {
            f=-1;
        }
        c=getchar();
    }
    while( c>='0' && c<='9' )
    {
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}

void add(int u , int v , int data)
{
	cnt++;
	to[cnt]=v;
	w[cnt]=data;
	nxt[cnt]=fr[u];
	fr[u]=cnt;

}

void input()
{
	n=Fr();
    m=Fr();
    s=Fr();
	for(int i=0;i<m;i++)
	{
		int u=Fr() , v=Fr() , w=Fr() ;
		add(u,v,w);
	}
}

priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;

void dij()
{
	for(int i=0;i<=n;i++)
	{
		dis[i]=inf;
	}
	dis[s]=0;
	q.push(make_pair(0,s));
	while(q.size())
	{
		int x=q.top().second;
		q.pop();
		if(vis[x])	continue;
		vis[x]=true;
		for(int i=fr[x];i;i=nxt[i])
		{
			if(dis[to[i]]>dis[x]+w[i])
			{
				dis[to[i]]=dis[x]+w[i];
				q.push(make_pair(dis[to[i]],to[i]));
			}
		}
	}
	return;
}

void work()
{
	dij();
}

void output()
{
    for(int i=1;i<=n;i++)
	{
		printf("%d ",dis[i]);
	}
	return;
}

int main()
{
	input();
	work();
	output();
	return 0;
}
2022/3/4 19:23
加载中...