Sweet Butter 香甜的黃油

2022-05-01 23:30:16 字數 1236 閱讀 1561

題目大意:m個點,n頭奶牛,p條邊,每一頭奶牛在乙個點上,乙個點可以有多隻奶牛,求這樣乙個點,使得所有奶牛到這個點的距離之和最小。

注釋:n<=500 , m<=800 , p<=1450 , 連邊的牧場之間的距離d<=255

想法:顯然,這是乙個最短路問題,有兩種途徑:1. 跑多源最短路。2. 跑m遍單源最短路。

第1種想法想到floyd , 時間複雜度o(m^3)=o(5.12*10^8),過不去,用第二種想法吧。

由於floyd都t了,n遍dijkstra的時間複雜度也是o(m^3),而另一種單源最短路是spfa,時間複雜度o(m*p+m*n)。所以,spfa才是我們想要的演算法。

首先,對於每乙個節點跑一遍spfa,注意清陣列。存邊用鄰接矩陣或鏈式前向星均可,博主在此採用鏈式前向星。

最後,附上醜陋的**...

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6 queueq;

7int f[10010],a[10010];8

bool v[10010];9

int to[10010],val[10010],next[10010],head[10010

],tot;

10void add(int x,int y,int z)//

存邊11

17void spfa(int xp)//

spfa,xp表示當前列舉的源點

1833}34

}35}36

intmain()

3744

intfr,t,va;

45for(int i=1;i<=p;i++)

4651

long

long minn=9220000000000000ll;

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

5360 minn=min(ans,minn);61}

62 printf("

%lld

",minn);

63return0;

64 }

小結,錯誤

1.雙向邊,雙向邊,雙向邊

2.line 60:寫成了 ans=min ( minn , ans ) 全盤爆蛋

3.因為本題不一定連通,所以在一定程度上我們需要考慮不連通的情況,所以ans和minn開long long 來解決。

香甜的黃油

農夫john發現做出全威士頓康星州最甜的黃油的方法 糖。把糖放在一片牧場上,他知道n 1 n 500 只奶牛會過來舔它,這樣就能做出能賣好價錢的超甜黃油。當然,他將付出額外的費用在奶牛上。農夫john很狡猾。像以前的巴甫洛夫,他知道他可以訓練這些奶牛,讓它們在聽到鈴聲時去乙個特定的牧場。他打算將糖放...

XYNU 香甜的黃油

偶係渣渣輝.蛤蛤蛤.今天集訓滴第二次比賽.過程有點刺.刺.刺激.qaq我們經歷了第三第四第五第七又爬回第三滴痛苦滴趕腳.還經歷了最後剩的題壓根不會寫 但是排名還不算考後的絕望 隊友說 你要是排名靠後又都不會寫那才是最絕望的 過程很坎坷,所幸結局還是闊以滴 就是對題目的理解程度還是很低 個人認為見得題...

最短路 香甜的黃油

原題鏈結 列舉所有的牧場,每次算出所有點到此牧場的最短路,再累加所有奶牛喜歡的牧場的最短路,比較得出最小值。資料規模對spfa比較友善。include define n 500 10 define m 800 10 using namespace std int ans 1e9 int c,n,m ...