求助,代码CE,本地没问题
查看原帖
求助,代码CE,本地没问题
754856
_zexal_楼主2023/1/16 12:46
#include<bits/stdc++.h>
using namespace std;
const int Maxn=300005;
int n,m,k,a,b,c,f,s,dis[Maxn],to[Maxn],w1[Maxn],head[Maxn],nxt[Maxn],tot;
bool vis[Maxn];
void AddEdge(int u,int v,int w) {
	to[++tot]=v;
	w1[tot]=w;
	nxt[tot]=head[u];
	head[u]=tot;
	return;
}
void Dijkstar() {
	priority_queue<int,vector<pair<int,int> >,greater<pair<int,int> > > Q;
	Q.push(make_pair(0,f));
	dis[f]=0;
	while(Q.size()!=0) {
		int t=Q.top().second;
	//	cout<<t<<endl;;
		Q.pop();
		if(vis[t]==1) continue;
		else vis[t]=1;
		for(int i=head[t]; i; i=nxt[i]) {
		//	cout<<"i"<<" "<<to[i]<<endl;
			if(dis[to[i]]>dis[t]+w1[i]&&vis[to[i]]==0) {
				dis[to[i]]=dis[t]+w1[i];
				Q.push(make_pair(dis[to[i]],to[i]));
			}
		}
	}
}
signed main() {
	memset(dis,0x3f,sizeof dis); 
	cin>>n>>m;
	for(int i=1; i<=m; i++) {
		cin>>a>>b;
		AddEdge(a,b+m,1);
		AddEdge(a+m,b+2*m,1);
		AddEdge(a+2*m,b,1);
	}
	cin>>f>>s;
	Dijkstar();
	if(dis[s+2*m]!=dis[0])cout<<dis[s+2*m];
	else cout<<-1;
	return 0;
}

2023/1/16 12:46
加载中...