没搞懂为什么会超时,大佬们看看
  • 板块P1250 种树
  • 楼主KomorKomor
  • 当前回复8
  • 已保存回复9
  • 发布时间2024/7/12 19:57
  • 上次更新2024/7/12 21:14:44
查看原帖
没搞懂为什么会超时,大佬们看看
1106289
KomorKomor楼主2024/7/12 19:57
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
#include <algorithm>
#define ll long long
#define inf 1e9
using namespace std;
typedef pair<double,int> pii;

struct node
{
    int v,w;
};

struct Graph
{
    vector<node> v;
}a[30010];

int n,m,vis[30010],dis[30010];

void spfa(int s)
{
	queue<int>q;
	for(int i=1;i<=n;++i)
    {
		dis[i]=inf;
		vis[i]=0;
	} 
	q.push(s);
	dis[s]=0;
	vis[s]=1;
	while(!q.empty()){
		int u=q.front();
		q.pop();
		vis[u]=0;
		for(auto e:a[u].v)
        {
			int v=e.v,w=e.w;
			if(dis[v]>dis[u]+w)
            {
				dis[v]=dis[u]+w;
				if(vis[v]==0)
                {
					vis[v]=1;
					q.push(v);
				}
			}
		}
	}
	return;
}

void solve()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        cin>>x>>y>>z;
        a[y].v.push_back({x-1,-z});
    }

    for(int i=1;i<=n;i++)
    {
        a[i].v.push_back({i-1,0});
        a[i-1].v.push_back({i,1});
        a[0].v.push_back({i,0});
    }

    spfa(0);

    cout<<dis[n]<<endl;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    int t=1;  //cin>>t;
    while(t--)  solve();
    return 0;
}
2024/7/12 19:57
加载中...