傳送門:ccf201609-4 交通規劃
1為首都,要求改造的鐵路到首都的最短路不變,且其他城市兩兩高鐵互通,故直接對1用dijkstra,算出其他點到1的最短路,此時即滿足了以上兩個條件。
由於要計算需要改造的長度,如果直接將其他點到1的最短路累加,會出現重複計算的現象,所以需要增加乙個c陣列,c[i]用來記錄點i的前驅到i點的長度,在dijkstra更新時一起更新,最後將c[i]累加即可。但要注意的一點是,dijkstra更新dis陣列時,判斷的條件是dis[v]>dis[u]+w[u][v],如果存在另一條點p,存在dis[v]==dis[p]+w[p][v],此時我們需要取min(w[u][v], w[p][v]),以達到所需改造的長度最小的目的。
下面上**:
#include #define ll long long
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 1e4+10;
struct node
node(int x, int d): x(x), d(d) {}
bool operator < (const node& a) const
};int n, m;
int dis[maxn], c[maxn];
vectorr[maxn];
void read()
}void dijkstra(int s)
; priority_queueq;
q.push(node(s, dis[s]));
while(!q.empty())
if(dis[next.x] == dis[cur.x]+next.d)
c[next.x] = min(next.d, c[next.x]);
}vis[cur.x] = 1;
}}void solve()
int main()
CCF 201609 4 交通規劃
問題描述 g國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設乙個高速鐵路系統。建設高速鐵路投入非常大,為了節約建設成本,g國國王決定不新建鐵路,而是將已有的鐵路改造成高速鐵路。現在,請你為g國國王提供乙個方案,將現有的一部分鐵路改造成高速鐵路,使得任何兩個城市間都可以通過高速鐵...
ccf201609 4交通規劃
試題編號 201609 4 試題名稱 交通規劃 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 g國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設乙個高速鐵路系統。建設高速鐵路投入非常大,為了節約建設成本,g國國王決定不新建鐵路,而是將已有的鐵路改造成高速鐵...
CCF 201609 4 交通規劃
時間限制 1.0s 記憶體限制 256.0mb g國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設乙個高速鐵路系統。建設高速鐵路投入非常大,為了節約建設成本,g國國王決定不新建鐵路,而是將已有的鐵路改造成高速鐵路。現在,請你為g國國王提供乙個方案,將現有的一部分鐵路改造成高速鐵...