zoukankan      html  css  js  c++  java
  • hdu 2066 Dijstra 堆优化

    嗯 有广搜的意思  

    #include<cstdio> #include<iostream> #include<queue> #include<vector> #define maxn 1001 #define inf 9999999
    using namespace std; struct vec //这里用邻接矩阵的方式比较浪费空间 所以用邻接表 这里是带权图 所以用结构体构图 { int point,cost; friend bool operator<(vec a,vec b) { return a.cost>b.cost; } }; int t,s,d,sta[maxn],en[maxn],dis[maxn]; vector<vec> fuck[maxn]; void init() { fill(dis,dis+maxn+1,inf); for(int i=1;i<=maxn;i++) fuck[i].clear(); } void dij(int ss) { priority_queue<vec> q; dis[ss]=0; vec temp; temp.point=ss; temp.cost=0; q.push(temp); while(!q.empty())//广度更新 每次取出离起点最近的点 { temp=q.top(); q.pop(); int v=temp.point; if(dis[v]<temp.cost) continue; for(int i=0;i<fuck[v].size();i++)//更新顶点周围点的距离 { vec ret=fuck[v][i]; if(dis[ret.point]>dis[v]+ret.cost)//如果临近的点的距离可以更新 { dis[ret.point]=dis[v]+ret.cost; ret.cost=dis[ret.point]; q.push(ret); } } } } int main() { while(cin>>t>>s>>d) { init(); // cout<<t<<s<<d<<endl; while(t--) { int a,b,c; cin>>a>>b>>c; vec temp; temp.cost=c; temp.point=b; fuck[a].push_back(temp); temp.point=a; fuck[b].push_back(temp); } for(int i=1;i<=s;i++) cin>>sta[i]; for(int i=1;i<=d;i++) cin>>en[i]; int mins=0; for(int i=1;i<=s;i++) { dij(sta[i]); mins=inf; for(int j=1;j<=d;j++) mins=min(mins,dis[en[j]]); } cout<<mins<<endl; } return 0; }
  • 相关阅读:
    Django----图片验证码接口
    jwt安装配置
    jwt介绍
    课程章节页面
    git使用整理
    时间复杂度和空间复杂度,排序算法
    linux源码安装mysql,shell编程学习,ubuntu
    linux之任务调度,磁盘分区,yum下载
    linux常用命令修改权限查看文档
    linux用户组相关,密码相关,文件操作,和启动级别
  • 原文地址:https://www.cnblogs.com/z1141000271/p/5803471.html
Copyright © 2011-2022 走看看