1 solutions
-
1
首先看到边权为 1,于是想到这道题可以用 bfs 做。
用 vector 存图, 记录答案,这个部分不用多讲。
初始化 和 数组,因为这题点数为 1000,所以初始化为 10000。
我们先对点 先做一遍 bfs ,用数组 记录当前的点记录有没有被遍历到,用队列做一遍 bfs ,用 数组记录每个点到 的距离最小值。
while(q.size()){ int k = q.front(); q.pop(); for(int i = 0;i < v[k].size();i++){ int u = v[k][i]; if(u2[u]) continue; d2[u] = d2[k] + 1; q.push(u); u2[u] = 1; } }
对点 同理做一遍 bfs ,但数组因为不能和点 的相同,所以用 和 记录。
然后用 和 遍历 1 到 ,如果当最短路为 时反而比 更短,就把 加1。
int dis = min(d1[t],d2[s]); for(int i = 1;i <= n;i++){ for(int j = i + 1;j <= n;j++){ if(mp[i][j]) continue; int w = min(d1[j] + d2[i],d2[j] + d1[i]) + 1; if(w >= dis) ans++; } }
最后输出 即可。
- 1
Information
- ID
- 5520
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 2
- Accepted
- 1
- Uploaded By