1 条题解
-
0
标准的dijkstra
!!注意优先队列一定要重载运算符
#include<iostream> #include<cstring> #include<queue> using namespace std; const int N=1e5; struct edge{ int to,w,nxt; }t[N]; int head[N],dis[N]; int tot; void addedge(int u,int v,int w){ t[++tot].nxt=head[u]; t[head[u]=tot].to=v; t[tot].w=w; return ; } struct node{ int dis,u; bool operator<(const node&x)const{ return x.dis<dis; } }; int n; bool vis[N]; priority_queue<node>q; void dijkstra(int s){ memset(dis,0x3f,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[s]=0; q.push({0,s}); while(!q.empty()){ int u=q.top().u; q.pop(); if(vis[u])continue; vis[u]=true; for(int i=head[u];i;i=t[i].nxt){ int v=t[i].to,w=t[i].w; if(dis[v]>dis[u]+w){ dis[v]=dis[u]+w; q.push({dis[v],v}); } } } cout<<dis[n]<<'\n'; return ; } int main(){ ios::sync_with_stdio(0); cin>>n; for(int i=1;i<=n;i++){ for(int j=i+1; j<=n; j++){ int w; cin>>w; addedge(i,j,w); } } dijkstra(1); return 0; }
- 1
信息
- ID
- 5417
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 2
- 标签
- 递交数
- 12
- 已通过
- 8
- 上传者