先贴代码,明天再解析(
AC代码:
#include<bits/stdc++.h>
const int maxn = 1000000000+7; //1e9+7
using namespace std;
vector<int> edge[1007];
int exi[1007][1007];
vector<int> q;
int n,m,s,t;
int dist[1007][1007];
void bfs(int st){
q.clear();
q.push_back(st);
for(int j=0;j<q.size();j++){
int x=q[j];
for(int u:edge[x]){
if(u==st || dist[st][u]) continue;
dist[st][u]=dist[st][x]+1;
q.push_back(u);
}
}
return ;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
edge[u].push_back(v);
edge[v].push_back(u);
exi[u][v]=1;
exi[v][u]=1;
}
for(int i=1;i<=n;i++) bfs(i);
int sum=0;
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++){
if(exi[i][j]) continue;
int chan=min(dist[i][s]+1+dist[j][t],dist[i][t]+1+dist[j][s]);
if(chan>=dist[s][t]) sum++;
}
}
cout<<sum<<endl;
return 0;
}