今天是六一节,小度去公园玩,公园一共 N 个景点,正巧看到朋友圈度度熊也在这个公园玩,于是他们约定好一块去景点 N。 小度当前所在景点编号为 T,从一个景点到附近的景点需要消耗的体力是 TE,而度度熊所在景点编号为 F ,移动消耗为 FE。 好朋友在一块,赶路都会开心很多,所以如果小度和度度熊一块移动(即在相同位置向相同方向移动),每一步他俩的总消耗将会减少 S。 求他俩到景点 N 时,所需要的总消耗最少是多少?
格式
输入格式:
第一行三个数值,TE,FE,S ,分别代表小度移动消耗值,度度熊移动消耗值,一起移动的消耗减少值。1≤TE,FE,S≤40000,S≤TE+FE; 第二行四个数值,T,F,N,M ,分别代表小度出发点,度度熊出发点,目标节点,总路径数。1≤T,F,N,M≤40000; 接下来 M 行,每行两个整数 ,X,Y,代表连通的两个景点。1≤X,Y≤N。
usingnamespace std; constint N = 4e4 + 10; constlonglong INF = 2e9; int k1, k2, k3, a, b, n, m; vector<int> p[N]; longlong A[N], B[N], C[N]; int cnt[N]; bool st[N];
voidbfs(int start, longlong dist[], int k){ for (int i = 1; i <= n; i++) dist[i] = INF; queue<int> q; q.push(start); dist[start] = 0; while (q.size()) { int t = q.front(); q.pop(); for (auto kk : p[t]) { if (dist[kk] > dist[t] + k) { dist[kk] = dist[t] + k; q.push(kk); } } }
} intmain() { ios::sync_with_stdio(false),cin.tie(0),cout.tie(0); cin >> k1 >> k2 >> k3 >> a >> b >> n >> m; for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; p[x].push_back(y); p[y].push_back(x); }