zoukankan      html  css  js  c++  java
  • 洛谷P1346 电车|最短路径|重新建图

    题目描述

    电车 题目描述

    思路

    最短路水题
    根据题意:
    对于每个车站:
    第一个出度的车站的权值为0
    其余的权值为1
    根据以上描述建图即可

    代码

    #include <cstdio>
    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <queue>
    #define inf 999999
    using namespace std;
    void read(int &n){
    	int num=0,w=1;
    	char ch=getchar();
    	while(ch<'0'||ch>'9'){
    		if(ch=='-') w=-1;
    		ch=getchar();
    	}
    	while(ch>='0'&&ch<='9'){
    		num=num*10+ch-'0';
    		ch=getchar();
    	}
    	n=num*w;
    }
    const int maxn=105;
    struct node{int v,w;};
    vector<node> g[maxn];
    int n,a,b;
    void init(){
    	read(n);read(a);read(b);
    	for(int u=1;u<=n;u++){
    		int k;read(k);
    		for(int i=1;i<=k;i++){
    			int v;read(v);
    			g[u].push_back((node){v,i==1?0:1});
    		}
    	}
    }
    int dist[maxn],done[maxn];
    void Dijkstra(int s){
    	for(int i=1;i<=n;i++) dist[i]=inf;
    	memset(done,0,sizeof(done));
    	dist[s]=0;
    	priority_queue<pair<int,int> >q;
    	q.push(make_pair(0,s));
    	while(!q.empty()){
    		int u=q.top().second;q.pop();
    		if(done[u]) continue;
    		done[u]=1;
    		for(int i=0;i<g[u].size();i++){
    			int v=g[u][i].v,w=g[u][i].w;
    			if(dist[v]>dist[u]+w){
    				dist[v]=dist[u]+w;
    				q.push(make_pair(-dist[v],v));
    			}
    		}
    	}
    }
    int main(){
    	init();
    	Dijkstra(a);
    	printf("%d",dist[b]!=inf?dist[b]:-1);
    	return 0;
    }
    

  • 相关阅读:
    JS——ajax login test
    Java——Java日期转Sql日期
    JDK动态代理实现原理
    Java 动态代理机制分析及扩展,第 1 部分
    Java枚举类
    Java强引用、 软引用、 弱引用、虚引用
    取模运算
    java集合框架
    字节和unicode
    编译原理随笔
  • 原文地址:https://www.cnblogs.com/saitoasuka/p/9984452.html
Copyright © 2011-2022 走看看