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月10日,省委常委、市委书记胡忠雄主持召开贵阳贵安政法工作专题会。他强调,要深入学习贯彻习近平法治...
格陵兰岛各政党领导人:格陵兰人... (来源:千龙网)格陵兰岛各政党领导人当地时间9日发表联合声明,指出“格陵兰人不想成为美国人”。声明重...
稀有“超人”漫画书1500万美... 一本将“超人”这个超级英雄角色带到世间的稀有漫画书日前以1500万美元易主,创漫画书转手价格最高纪录...
我市加大力度开展见义勇为英模“... 本报讯(记者 李晓娟)2025年以来,我市积极开展见义勇为英模“爱心救助工程”,强化权益保障,深化宣...
特朗普:美国和委内瑞拉“合作扣... 澎湃新闻2026-01-10 12:29:48新华社马天静、徐德智/央视新闻 据新华社报道,美国总统...