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 

相关内容

热门资讯

游戏驿站上调2026财年EBI... 游戏驿站更新业绩展望,市场讨论核心从“短期能否存续”转向“手握充足资本的公司能创造何种价值”,当前估...
Eshallgo(EHGO)大... 核心事件:Eshallgo(股票代码EHGO)盘中大幅暴跌,跌幅超21%,收盘报约3.05美元,本次...
特斯拉早盘涨超3% 深化与Sp...   特斯拉股价周一早盘上涨超3%,此前有消息称该公司正进一步深化与姊妹公司SpaceX的合作关系。截...
广钢气体:氦气小分子深地存储项... 广钢气体6月29日公告,公司股票自2026年6月9日至6月29日累计涨幅达74.51%,显著高于科创...
花旗维持对阿尔伯森的买入评级 ... 花旗集团分析师保罗·勒茹对艾伯森公司维持“买入”评级,将其目标价从22美元下调至17美元。译文内容由...