題目大意: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 5using
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 ...