NOIP2015模擬10 22 最小代價

2022-08-18 05:33:15 字數 1116 閱讀 6698

本來在比賽上就想到最小生成樹了,但不相信這道題那麼簡單,然後就沒有然後了。。。

給出一幅由n個點m條邊構成的無向帶權圖。

其中有些點是黑點,其他點是白點。

現在每個白點都要與他距離最近的黑點通過最短路連線(如果有很多個黑點,可以選取其中任意乙個),我們想要使得花費的代價最小。請問這個最小代價是多少?

注意:最後選出的邊保證每個白點到離它最近的黑點的距離仍然等於原圖中的最短距離。

這道題最麻煩的地方就是最終搞成的圖有可能有很多個聯通塊。
增加乙個點:0點,讓0點連線所有的黑點,邊權為0;

處理從s發到每個點的最短距離

題目要求最小的總距離,顯然搞一遍最小生成樹就可以了。

#include #include #include #include #include #include #include const long long maxlongint=2147483747;

using namespace std;

long long b[710000][4],dis[710000],next[710000],last[710000],a[710000],fa[710000],ans,tot,n,m,v[710000],d[8000000];

bool bz[710000];

void q(long long l,long long r)

} if(idis[k]+v[i])

}} }

}bool dg(long long x)

} return true;

}long long get(long long x)

int kruskal() }}

int bj(long long x,long long y,long long k)

int main()

for(i=1;i<=m;i++)

spfa();

tot=0;

dg(0);

q(1,tot);

bool b1=maxlongint;

kruskal();

if(ans==0) cout<<"impossible";else

cout<}

NOIP2015模擬10 22 最小代價

洛谷ac通道!一道非常良心卡空間的圖論題,比賽的時候我一交直接mle了。然後才發現自己多按了個0 題目中說要將所有的白點連向最近的黑點。在此之前,我們需要先將多餘的邊剔除掉 m 居然是 n 的兩倍,這能不剔邊嗎!怎麼剔呢?考慮增加乙個超級原點,編號 n 1 最開始向所有黑點連乙個 w 0 的有向邊....

NOIP2015模擬10 22 最大子矩陣

我們將矩陣a中位於第i行第j列的元素記作a i,j 乙個矩陣a是酷的僅當它滿足下面的條件 a 1,1 a r,s a 1,s a1 r,1 其中r為矩陣a的行數,s為矩陣a的列數。進一步,如果乙個矩陣是非常酷的僅當它的每乙個至少包含兩行兩列子矩陣都是酷的。你的任務是,求出乙個矩陣a中的乙個非常酷的子...

NOIP2015模擬11 5 旅行

經過觀察,可以發現題目有乙個比較不錯的性質 1 一條合法的路徑必須由兩條路徑組成,一條是奇數,另一條是偶數。所以我們可以先把每乙個點到達根節點的路徑求出來,深度為奇數的點放進乙個a aa陣列裡,偶數的放進b bb陣列裡,再給他們分別進行排序。然後進行兩兩結合,先把a陣列裡的所有數跟b1b b1 結合...