Pagini recente » Cod sursa (job #2564763) | Cod sursa (job #2795811) | Cod sursa (job #369177) | Cod sursa (job #1535407) | Cod sursa (job #300798)
Cod sursa(job #300798)
1. program flux;
2. type capacitate = record
3. max,can:word;
4. end;
5. lista = ^articol;
6. articol = record
7. nr:integer;
8. u:lista;
9. c:capacitate;
10. end;
11. var a,p:array [1..1000] of lista;
12. parinte,cap,g:array [0..1000] of word;
13. aux,sursa,destinatie,i,j,n,m,x,y,c:word;
14. saturat:array [1..1000] of boolean;
15.
16. function min(x,y:word):word;
17. begin
18. min:=x;
19. if y<x then
20. min:=y;
21. end;
22.
23.
24. procedure df(nod,tata:word);
25. var i:word;
26. begin
27. for i:=1 to g[nod] do
28. begin
29. if a[nod]^.c.can<>a[nod]^.c.max then
30. begin
31. aux:=min(cap[nod],a[nod]^.c.max-a[nod]^.c.can);
32. inc(a[nod]^.c.can,aux);
33. inc(cap[a[nod]^.nr],aux);
34. dec(cap[nod],aux);
35. df(a[nod]^.nr,nod);
36. end;
37. a[nod]:=a[nod]^.u;
38. end;
39. a[nod]:=p[nod];
40. end;
41.
42.
43. begin
44. assign(input,'maxflow.in');
45. assign(output,'maxflow.out');
46. reset(input);
47. rewrite(output);
48.
49. readln(n,m);
50. fillchar(g,sizeof(g),0);
51. readln(sursa,destinatie);
52.
53. for i:=1 to n do
54. begin
55. new(a[i]);
56. p[i]:=a[i];
57. end;
58.
59. for i:=1 to m do
60. begin
61. readln(x,y,c);
62. a[x]^.nr:=y;
63. a[x]^.c.max:=c;
64. a[x]^.c.can:=0;
65. new(a[x]^.u);
66. a[x]:=a[x]^.u;
67. inc(g[x]);
68. end;
69.
70. for i:=1 to n do
71. a[i]:=p[i];
72.
73. parinte[sursa]:=0;
74. fillchar(saturat,sizeof(saturat),false);
75. cap[sursa]:=maxint;
76. df(sursa,0);
77.
78. writeln(cap[destinatie]);
79. close(input);
80. close(output);
81. end.