只对了3个点,其他RE
查看原帖
只对了3个点,其他RE
1099365
yunren2012楼主2024/12/1 15:29
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node{
    int v,w;
};
struct str{
    int a,x;
}c[500005];
vector <node> w[500005];
int n,m,s,b,u,v,t,w1,ans=1e18,vis[500005],dis[500005];
bool cmp(str n,str m){
    return n.x<m.a;
}
void SPFA(int x){
	memset(dis,0x3f,sizeof(dis));
	queue <int> q;
	vis[x]=1;
	q.push(x);
	dis[x]=0;
	while(!q.empty())
	{
		int n1=q.front();
		q.pop();
		vis[n1]=0;
		for(int i=0; i<w[n1].size(); i++)
			if(dis[n1]+w[n1][i].w<dis[w[n1][i].v])
			{
				dis[w[n1][i].v]=dis[n1]+w[n1][i].w;
				if(vis[w[n1][i].v]==0)
				{
					vis[w[n1][i].v]=1;
					q.push(w[n1][i].v);
				}
			}
	}
}
signed main(){
    cin>>n>>m>>s>>b;
    for(int i=1; i<=m; i++)
    {
        cin>>u>>v>>w1;
        w[u].push_back(node{v,w1});
        w[v].push_back(node{u,w1});
    }
    cin>>t;
    for(int i=1; i<=t; i++)
        cin>>c[i].a>>c[i].x;
    sort(c+1,c+t+1,cmp);
    SPFA(s);
    if(t==0 || dis[b]<c[1].a)
    {
    	cout<<dis[b];
    	return 0;
    }
    for(int i=1; i<=t; i++)
    {
    	if(dis[c[i].x]<c[i].a)
    	{
    		cout<<c[i].a;
    		return 0;
    	}
    	if(dis[c[i].x]>=c[i].a && dis[c[i].x]<c[i+1].a)
    	{
    		cout<<dis[c[i].x];
    		return 0;
    	}
    }
    cout<<dis[c[t].x];
    return 0;
}
2024/12/1 15:29
加载中...