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 

相关内容

热门资讯

杭州银行行长张精科任职资格获监... 中访网数据  杭州银行股份有限公司(证券代码:600926,证券简称:杭州银行)今日公告,公司收到国...
伊朗外长回应美总统“不要报复”... 本文转自【央视新闻客户端】;总台记者获悉,当地时间3月1日,伊朗外交部长阿拉格齐在接受媒体采访时,就...
美军称在打击伊朗导弹设施时使用... 转自:财联社【美军称在打击伊朗导弹设施时使用B-2隐形轰炸机】财联社3月2日电,美国中央司令部当地时...
阿布扎比和迪拜股市3月2日至3...   阿联酋资本市场管理局通过电子邮件发表声明说,阿布扎比证券交易所和迪拜金融市场3月2日至3日关闭。...
主要产油国宣布4月增产 转自:成都日报锦观主要产油国宣布4月增产 据新华社维也纳3月1日电(记者 孟凡宇) 石油输出国...