求助P1346 Dijkstra80分
查看原帖
求助P1346 Dijkstra80分
572482
Dream_weavers楼主2022/3/1 20:42

2点WA了QAQ

记录

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e5+5;
int n,m,s,t,k; 
struct Edge{
	int v,w;
	Edge(int v,int w):v(v),w(w){}
};
struct Node{
	int u,d;
	Node(int u,int d):u(u),d(d){}
	bool operator < (const Node &a) const{
		return d>a.d;
	}
};
int d[N],vis[N];
vector<Edge> adj[N];
void dij(){
	memset(d,INF,sizeof(d));
	d[s]=0;
	priority_queue<Node>q;
	q.push(Node(s,0));
	while(!q.empty()){
		int u=q.top().u;
		q.pop();
		if(u==t)return;
		if(vis[u])continue;
		vis[u]=1;
		for(int i=0;i<adj[u].size();i++){
			int v=adj[u][i].v;
			int w=adj[u][i].w;
			if(d[v]>d[u]+w){
				d[v]=d[u]+w;
				q.push(Node(v,d[v]));
			}
		}
	}
}
signed main(){
	cin>>n>>s>>t;
	int u,v,w;
	for(int u=1;u<=n;u++){
		cin>>k;
		for(int i=1;i<=k;i++){
			cin>>v;
			if(i==1)w=0;
			else w=1;
			adj[u].push_back(Edge(v,w));
		}
	}
	dij();
	if(d[t]!=INF)cout<<d[t];
	else cout<<-1;
    return 0;
}


2022/3/1 20:42
加载中...