hdu 3549 Flow Problem 网络流
创始人
2024-02-09 06:24:08

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3549

Network flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph.

Input

The first line of input contains an integer T, denoting the number of test cases.
For each test case, the first line contains two integers N and M, denoting the number of vertexes and edges in the graph. (2 <= N <= 15, 0 <= M <= 1000)
Next M lines, each line contains three integers X, Y and C, there is an edge from X to Y and the capacity of it is C. (1 <= X, Y <= N, 1 <= C <= 1000)

Output

For each test cases, you should output the maximum flow from source 1 to sink N.

题意:不能再简单了这题意,很裸的告诉你根据输入来求解最大流。

解法:网络流算法求解最大流,模板题,Dinic。

 1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #define inf 0x7fffffff9 using namespace std;
10 const int maxn=16;
11 
12 int n,m;
13 int graph[maxn][maxn],d[maxn];
14 
15 int bfs()
16 {
17     memset(d,0,sizeof(d));
18     d[1]=1;
19     queue Q;
20     Q.push(1);
21     while (!Q.empty())
22     {
23         int u=Q.front() ;Q.pop() ;
24         for (int v=1 ;v<=n ;v++)
25         {
26             if (!d[v] && graph[u][v]>0)
27             {
28                 d[v]=d[u]+1;
29                 Q.push(v);
30                 if (v==n) return 1;
31             }
32         }
33     }
34     return 0;
35 }
36 
37 int dfs(int u,int flow)
38 {
39     if (u==n || flow==0) return flow;
40     int cap=flow;
41     for (int v=1 ;v<=n ;v++)
42     {
43         if (d[v]==d[u]+1 && graph[u][v]>0)
44         {
45             int x=dfs(v,min(cap,graph[u][v]));
46             cap -= x;
47             graph[u][v] -= x;
48             graph[v][u] += x;
49             if (cap==0) return flow;
50         }
51     }
52     return flow-cap;
53 }
54 
55 int Dinic()
56 {
57     int sum=0;
58     while (bfs()) sum += dfs(1,inf);
59     return sum;
60 }
61 
62 int main()
63 {
64     int t,ncase=1;
65     scanf("%d",&t);
66     while (t--)
67     {
68         scanf("%d%d",&n,&m);
69         int a,b,c;
70         memset(graph,0,sizeof(graph));
71         for (int i=0 ;i 

相关内容

热门资讯

玩家必看教程!智星德州扑克辅助... 玩家必看教程!智星德州扑克辅助挂多功能透视工具,好像真的是有挂(有挂详细)1、该软件可以轻松地帮助玩...
记者揭秘!wpk辅助挂多功能透... 记者揭秘!wpk辅助挂多功能透视工具,原来存在有挂(有挂猫腻)1、全新机制【wpkai辅助工具激活码...
科普!德扑圈辅助挂多功能透视工... 科普!德扑圈辅助挂多功能透视工具,总是有挂(有挂教学)1、实时德扑圈透视辅助更新:用户可以随时随地访...
玩家必备攻略!WPK辅助挂多功... 玩家必备攻略!WPK辅助挂多功能透视工具,其实存在有挂(确实有挂)1、任何WPK透视是真的假的的玩家...
分享一款!智星菠萝德州辅助挂多... 分享一款!智星菠萝德州辅助挂多功能透视工具,总是是真的有挂(有挂神器)1)智星菠萝德州辅助插件:进一...