POJ 1459 Power Network
Power Network
64-bit integer IO format: %lld Java class name: Main
An example is in figure 1. The label x/y of power station u shows that p(u)=x and pmax(u)=y. The label x/y of consumer u shows that c(u)=x and cmax(u)=y. The label x/y of power transport line (u,v) shows that l(u,v)=x and lmax(u,v)=y. The power consumed is Con=6. Notice that there are other possible states of the network but the value of Con cannot exceed 6.
Input
Output
Sample Input
2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20 7 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 (2,4)7 (3,5)2 (3,6)5 (4,2)7 (4,3)5 (4,5)1 (6,0)5 (0)5 (1)2 (3)2 (4)1 (5)4
Sample Output
15 6
Hint
Source
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <climits> 7 #include <vector> 8 #include <queue> 9 #include <cstdlib> 10 #include <string> 11 #include <set> 12 #include <stack> 13 #define LL long long 14 #define pii pair<int,int> 15 #define INF 0x3f3f3f3f 16 using namespace std; 17 const int maxn = 105; 18 int e[maxn][maxn],n,m,p,c,maxflow; 19 int d[maxn],q[100000],S,T,hd,tail; 20 bool bfs(){ 21 memset(d,-1,sizeof(d)); 22 d[S] = 0; 23 q[tail++] = S; 24 while(hd < tail){ 25 int u = q[hd++]; 26 for(int i = 1; i <= n; i++){ 27 if(d[i] == -1 && e[u][i] > 0){ 28 d[i] = d[u]+1; 29 q[tail++] = i; 30 } 31 } 32 } 33 return d[T] > 0; 34 } 35 int dfs(int u,int low){ 36 int a = 0; 37 if(u == T) return low; 38 for(int i = 1; i <= n; i++){ 39 if(e[u][i] > 0 && d[i] == d[u]+1 && (a = dfs(i,min(low,e[u][i])))){ 40 e[u][i] -= a; 41 e[i][u] += a; 42 return a; 43 } 44 } 45 return 0; 46 } 47 int main() { 48 char ch; 49 int u,v,w; 50 while(~scanf("%d %d %d %d",&n,&p,&c,&m)){ 51 memset(e,0,sizeof(e)); 52 for(int i = 1; i <= m; i++){ 53 cin>>ch>>u>>ch>>v>>ch>>w; 54 e[u+1][v+1] += w; 55 } 56 S = n+1; 57 T = n+2; 58 n += 2; 59 for(int i = 1; i <= p; i++){ 60 cin>>ch>>v>>ch>>w; 61 e[S][v+1] += w; 62 } 63 for(int i = 1; i <= c; i++){ 64 cin>>ch>>u>>ch>>w; 65 e[u+1][T] += w; 66 } 67 int ans = maxflow = 0; 68 while(bfs()) while(maxflow = dfs(S,INF)) ans += maxflow; 69 printf("%d\n",ans); 70 } 71 return 0; 72 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。