分析
我們可以先跑一遍全價的最短路
之後我們列舉這個第k大的**w[i]
將其它邊減這個邊的權值和0取max
在跑出最短路之後加上減去的費用,即w[i]*k
我們發現如果價值大於w[i]的邊小於k個
那麼由於小於w[i]的邊經過之前操作後權值會比原先大所以一定不有
所以我們不難得出一定是這個點正好是第k大時才是最優的
最終所有答案取min即可
**
#includeusingnamespace
std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define int long long
const
int inf = 1e15+7
;int n,m,k,s,t,d[3010],vis[3010],wh,f[3010
];priority_queue
int,int> >q;
vector
int,int> >v[3010
];inline
intdij()}}
return
d[t];
}signed main()
int ans=dij();
for(i=1;i<=m;i++)
cout
}
ccf 高速公路
問題描述 某國有n個城市,為了使得城市間的交通更便利,該國國王打算在城市之間修一些高速公路,由於經費限制,國王打算第一階段先在部分城市之間修一些單向的高速公路。現在,大臣們幫國王擬了乙個修高速公路的計畫。看了計畫後,國王發現,有些城市之間可以通過高速公路直接 不經過其他城市 或間接 經過乙個或多個其...
201509 4 高速公路
鄰接表存圖 include include include define maxn 200010 using namespace std int dfn maxn low maxn int clock,top 當前元素是被訪問的序號,模擬棧的首部 bool instack maxn intstack...
CCF高速公路
新學了tarjan演算法,今天中午之前還沒聽過,用dfs硬寫加了點優化得了70,對路的演算法還是給力,直接滿分。回頭整理一篇關於強連通分量的部落格,另外這次往後就慢慢全用c 了。include include include include define maxsize 10005 using na...