WA悬关
查看原帖
WA悬关
838542
Never_Gone楼主2024/9/28 20:01

只能A样例

#include<bits/stdc++.h>
//#define itn int
const int maxm=2e5+10;

using namespace std;

struct node{
	int pos,dis;
	friend bool operator <(node a,node b){
		return a.dis<b.dis;
	}	
};

int n,m,a,b,ddis[maxm];
int cnt,dis[maxm],h[maxm];
bool vis[maxm];

struct edge{
	int to,next,val;
}way[maxm];

priority_queue<node> q;

void add(int from,int to){
	way[++cnt].to=to;
	way[cnt].val=1;
	way[cnt].next=h[from];
	h[from]=cnt;
}

void dij(){
	for(int i=0;i<n;i++) dis[i]=INT_MAX;
	dis[a]=0;
	q.push((node){a,0});
	
	while(!q.empty()){
		node tmp=q.top();
		q.pop();
		
		int x=tmp.pos,y=tmp.dis;
		if(vis[x]) continue;
		vis[x]=1;
		for(int i=h[x];i;i=way[i].next){
			if(dis[way[i].to]>dis[x]+way[i].val){
				dis[way[i].to]=dis[x]+way[i].val;
				q.push((node){way[i].to,dis[way[i].to]});
			}
		}
	}
}

int main()
{
	cin>>n>>m>>a>>b;
	for(int i=0;i<n;i++) cin>>ddis[i];
	for(int i=1;i<=m;i++){
		int c,d; cin>>c>>d;
		add(c,d);
		//add(d,c,ddis[d]-ddis[c]-1);
	}
	
	dij();
	if(dis[b]==INT_MAX) cout<<"No solution";
	else cout<<ddis[b]-ddis[a]+dis[b];
	return 0;
}
2024/9/28 20:01
加载中...