有n個旅客來到了乙個旅遊景點,你作為乙個導遊要給這n個旅客安排旅遊路線。如果你安排了第i個旅客去旅遊,那麼你會得到xi的錢(若xi為負數,則你需要給他﹣xi的錢)。對於第i個顧客,他有ki個要求。每個要求是乙個二元組(aij, bij),表示如果你安排了顧客i去,但是沒有安排顧客aij去,那麼xi就要減去bij。問如何安排顧客才能獲得最大的收益。(我只是看網上好像沒有這個題的題解,所以就寫寫。當然,思路還是由大神犇啟發的)
容易發現,如果以收益為邊權,則會出現負邊權。
注意到此時,邊權為正的邊只存在於xi(其實題目沒有說明bij是否可能為負,但事實上資料裡是沒有負的bij)
所以,換個思路。可以求最小損耗。
可以這樣建圖:對於xi, 如果xi為正,則連線i到t,容量為xi;如果xi為負,則連線s到i,容量為abs(xi).對於(aij, bij),連線aij到i,容量為bij.
這樣建圖後,最小割即是最小損耗。
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int n = 1100, m = 550000, inf = 0x3f3f3f3f;
intmap[n], line[m][3], lt;
int d[n];
int n, s, t, sum;
void ins(int a, int b, int w)
bool bfs() }}
return d[t] != -1;
}int dfs(int u, int f)
}if(ans == 0) d[u] = -1;
return ans;
}int dinic()
return res;
}int main()
else
scanf("%d", &k);
while(k--)
}printf("%d\n", sum-dinic());
return
0;}
最佳旅遊路線
題目描述 某旅遊景區的街道成網格狀。其中東西向德街道都是旅遊街,南北向的街道都是林蔭道。由於遊客眾多,旅遊街規定為單行道,遊客在旅遊街上只能從西向東走,在林蔭道上則既可從南向北,又可從北向南走。阿龍想到這個旅遊街區遊玩。他的好友阿福給了他一些建議,用分值表示所有旅遊街相鄰兩個路口之間的街道值得遊覽程...
loj539 旅遊路線
考慮列舉加油的位置,當確定某次在第 i 個位置加油後,且下一次到 j 加油,那麼 i 到 j 必然會選擇不超過 c 條邊且最長的路徑,記作 d 如果能求出 d 再設 f 表示 q 元 恰好用完 從 i 出發的最長路,列舉 i 之後那一次加油點即可轉移,由於 q le n 因此這裡的複雜度為 o n ...
codevs 2611 觀光旅遊
某旅遊區裡面有 個景點。兩個景點之間可能直接有道路相連,用a i j 表示它的長度,否則它們之間沒有直接的道路相連。這裡所說的道路是沒有規定方向的,也就是說,如果從i到j有直接的道路,那麼從j到i也有,並且長度與之相等。旅遊區規定 每個遊客的旅遊線路只能是乙個迴路 好霸道的規定 也就是說,遊客可以任...