正反加边分别跑spfa最短路,把两次最短路的和求个max就是答案 #include<iostream> #include<cstdio> #include<queue> #include<cstring> using namespace std; const int N=2005,M=200005; int n,m,s,x[M],y[M],z[M],h[N],cnt,c[N],d[N]; bool v[N]; struct qwe { int ne,to,v…
因为是双向边,所以相当于两条到1的最短路和,先跑spfa然后直接处理询问即可 #include<iostream> #include<cstdio> #include<queue> using namespace std; const int N=50005,inf=1e9; int n,m,b,h[N],cnt,dis[N]; bool v[N]; struct qwe { int ne,to,va; }e[N<<2]; int read() { int…
直接bfs,在过程中更新方案数即可 #include<iostream> #include<cstdio> #include<queue> using namespace std; const int N=55,inf=1e9,dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1}; int n,m,a[N][N],b[N][N],dis[N][N]; long long f[N][N]; bool v[N][N];…