洛谷P4553 80人環遊世界

2022-04-30 11:30:13 字數 1211 閱讀 7704

題意:有m個人,給定n個城市構成dag。

每個城市恰好有vi個人經過,每條邊有費用。

每個人自選起點,終點。

求最小費用。

解:首先拆點,連邊,流量為[vi, vi]。

然後做有上下界有源匯最小費用可行流即可。

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

7const

int n = 18000, m = 1000010, inf = 0x3f3f3f3f;8

9struct

edge edge[m << 1]; int top = 1;12

13int

e[n], d[n], vis[n], pre[n], flow[n];

14 std::queueq;

15bool vp[200010

];16

17 inline void add(int x, int y, int z, int

w) 33

34 inline bool spfa(int s, int

t) 54}55

}56}57

return d[t]

5960 inline void update(int s, int

t) 68

return;69

}7071 inline int solve(int s, int t, int &cost)

79return

ans;80}

8182

83int

main()

94for(int i = 1, x; i <= n; i++)

100 add(i +n, j, inf, x);

101}

102 add(ss, i, inf, 0

);103 add(i + n, t, inf, 0

);104

}105 add(s, ss, m, 0

);106 add(t, s, inf, 0

);107

intans;

108solve(s, t, ans);

109 printf("%d"

, ans);

110return0;

111 }

ac**

P4553 80人環遊世界 上下界可行費用流

link 無特殊說明費用都是0 新建源點s ss和匯點t tt,新建虛擬限制節點xun ixuni xuni s ss連向xun ixuni xuni 流量 0,m 0,m 0,m 的邊,表示可以派出的人不能超過mmm x un ixuni xuni 連向每個點流量 0,inf 0,inf 0,in...

BZOJ2055 80人環遊世界

題解 總算a掉了,各種蛋疼。int main for1 i,n for2 j,i 1,n for1 i,n insert i n,t,0,inf,0 insert t,s,0,inf,0 mcf printf d n mincost return0 s是附加源,sss是真正的源,t是真正的匯。這樣構...

bzoj 2055 80人環遊世界

有源匯上下界最小費用可行流。將每個國家拆點。源點向乙個新建節點連一條上界為總人數下界為0費用為0的邊。新建節點向每個國家的入點連一條上界為正無窮下界為0費用為0的邊。每個國家的入點向出點連一條上下界均為該國家訪問人數費用為0的邊。每個國家的出點向匯點連一條上界為正無窮下界為0費用為0的邊。對於國家i...