求调
查看原帖
求调
557927
Chen小阳啊楼主2023/9/6 10:50
using namespace std;
struct edge{
	int v,w,next;
}e[100010];
struct node{
	int w,v;
	bool operator <(const node &x)const{
		return w>x.w;
	}
};
priority_queue<node>q;
int n,vis[100010],dis[100010],head[100010],m,cnt,a,b;
void add(int u,int v,int w){
	e[++cnt].v=v;
	e[cnt].w=w;
	e[cnt].next=head[u];
	head[u]=cnt;
}
void dij(){
	for(int i=1;i<=n;i++){
		dis[i]=11451400;
	}
	dis[a]=0;
	q.push((node){0,a});
	while(!q.empty()){
		node x=q.top();
		q.pop();
		int u=x.v;
		if(vis[u])continue;
		vis[u]=1;
		for(int i=head[u];i;i=e[i].next){
			int v=e[i].v;
			if(dis[v]>dis[u]+e[i].w){
				dis[v]=dis[u]+e[i].w;
				q.push((node){dis[v],v});
			}
		}
	}
}
int main(){
	cin>>n>>a>>b;
	for(int i=1;i<=n;i++){
		int v,k;
		cin>>k;
		for(int j=1;j<=k;j++){
			cin>>v;
			if(j==1){
				add(i,v,0);
			}
			else add(i,v,1);
		}
	}
	if(dis[b]==11451400)cout<<-1;
	cout<<dis[b]<<endl;
} 

迪杰斯特拉 ,但是只有30

2023/9/6 10:50
加载中...