1046. Shortest Distance

#题意

仅由一个环的图, 求任意两个节点之间的最短距离

#思路

将环剪开成一条线, 记录每个节点距离起始节点的距离, 查询时取两个方向的距离的最小值

#感想

意外的很简单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
using namespace std;

int D[100001];

int main()
{
#ifdef _DEBUG
freopen(__FILE__ ".txt", "r", stdin);
#endif

int n;
cin >> n;
for (int i = 0; i < n; i++) {
int dist;
cin >> dist;
D[i + 1] = D[i] + dist;
}

int len = D[n];

int q;
cin >> q;
for (int i = 0; i < q; i++) {
int x, y;
cin >> x >> y;
if (x > y) {
swap(x, y);
}
cout << min(D[y - 1] - D[x - 1], len - D[y - 1] + D[x - 1]) << endl;
}

return 0;
}