算法:
题意求严格次短路,我们先跑SPFA,计算出从1和从N到其他各个点的最短路长度,接着枚举每一条边,可以O(1)算出N到1经过该边的最短路长度,我们统计出这2*R(双向道路)个长度中第二短的即可。
Code:
#include<iostream>
#include<queue>
#define rep(i,j,k) for(int i=j;i<=k;i++)
using namespace std;
template<typename T> void read(T &num){
char c=getchar();num=0;T f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){num=(num<<3)+(num<<1)+(c^48);c=getchar();}
num*=f;
}
template<typename T> void qwq(T x){
if(x>9)qwq(x/10);
putchar(x%10+'0');
}
template<typename T> void write(T x){
if(x<0){x=-x;putchar('-');}
qwq(x);p