acwing 4275. Dijkstra序列
题目背景
输入
输出
完整代码
#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[1010],dist[1010],g[1010][1010],st[1010];int dij(int u){memset(st,0,sizeof st);memset(dist,0x3f,sizeof dist);dist[u]=0;for(int i=0;i<n;i++){int t=a[i];for(int j=1;j<=n;j++){if(!st[j]&&dist[j]<dist[t]) return 0;}for(int j=1;j<=n;j++){dist[j]=min(dist[j],dist[t]+g[t][j]);}st[t] = 1;}return 1;
}int main(){cin>>n>>m;memset(g,0x3f,sizeof g);for(int i=0;i<m;i++){int v,w,r;cin>>v>>w>>r;g[v][w]=g[w][v]=min(g[v][w],r);}cin>>k;for(int i=0;i<k;i++){for(int i=0;i<n;i++) cin>>a[i];cout<<(dij(a[0])?"Yes":"No")<<"\n";}return 0;
}
这道题就是看每次dij方法和他给的点是不是一样近。
dij方法好像都是开那几个数组,dij函数一样,大概也就邻接表 邻接矩阵 堆优化几种吧。