第一道题是模板题,下面主要是两种模板,但都用的是Dinic算法(第二个题也是) 第一题: 题意就不需要讲了,直接上代码: vector代码: 1 //invalid types 'int[int]' for array subscript :字母重复定义 2 #include<stdio.h> 3 ...
分类:
其他好文 时间:
2019-11-16 21:55:43
阅读次数:
96
原文博客:https://blog.csdn.net/stevensonson/article/details/79177530 网络流图是一张只有一个源点和汇点的有向图,而最大流就是求源点到汇点间的最大水流量,下图的问题就是一个最基本,经典的最大流问题 二.流量,容量和可行流 对于弧(u,v)来说 ...
分类:
编程语言 时间:
2019-11-11 21:29:37
阅读次数:
74
/*题意: 有 n 个城市,知道了起点和终点,有 m 条有向边,问从起点到终点的最短路一共有多少条。这是一个有向图,建边的时候要注意!!解题思路:这题的关键就是找到哪些边可以构成最短路,其实之前做最短路的题目接触过很多,反向建一个图,求两边最短路,即从src到任一点的最短路dis1[]和从des到任 ...
分类:
其他好文 时间:
2019-11-11 20:00:24
阅读次数:
66
很显然是网络流,对于点的限制,拆点建流量为1的边,之后跑最小费用最大流即可(由此很显然可以发现原图边的流量也只需要1) 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 405 4 struct ji{ 5 int nex,to ...
分类:
其他好文 时间:
2019-11-10 17:13:08
阅读次数:
75
最小割,考虑最小割就是要将整张图分为两块,本题中就分别表示赞同和不赞同,那么首先一开始赞同的点向S连边,不赞同的点向T连边,如果这些点分到了另一边就要割掉这条边,朋友关系同理,连双向边同样表示分到两边要割掉这条边,跑最小割=最大流即可 1 #include<bits/stdc++.h> 2 usin ...
分类:
其他好文 时间:
2019-11-10 15:51:46
阅读次数:
72
1 #include<iostream> 2 #include<queue> 3 #include<cstring> 4 using namespace std; 5 6 const int maxn = 60; 7 8 const int INF = 0x3f3f3f3f; 9 int n; 10 ...
分类:
其他好文 时间:
2019-11-09 00:12:46
阅读次数:
78
void add_dinic(int u, int v) { e[++cnt].v = v; e[cnt].w = 0; e[cnt].nxt = head[u]; head[u] = cnt; } int dfs_dinic(int x, int flow) { if (x == ed) retu ...
分类:
编程语言 时间:
2019-11-09 00:03:06
阅读次数:
114
..突然发现自己拖了很久都没有学习有关网络流的东西了,所以先从模板开始写起吧. dinic code: #include<iostream> #include<cstring> #include<queue> #define INF 0x3f3f3f3f const int MAXN = 1e6+5 ...
分类:
其他好文 时间:
2019-11-07 18:50:47
阅读次数:
73
这道题跟求最大流的时候差不多。 都是先构造可行流,然后判断是否可行, 可行的话,就利用残余流量,构造从汇点t跑到源点s的最大流, 如何求出答案呢。 在第一次求可行流的dinic后,跟求最大流的时候一样,从t到s是可行流的流量; 这个时候t到s的反向边,也就是s到t的流量就是t到s流的量(因为t到s定 ...
分类:
其他好文 时间:
2019-11-06 22:28:04
阅读次数:
106
二分+最大流: 1 //题目大意:有编号为1~n的女生和1~n的男生配对 2 // 3 //首先输入m组,a,b表示编号为a的女生没有和编号为b的男生吵过架 4 // 5 //然后输入f组,c,d表示编号为c的女生和编号为d的女生是朋友 6 // 7 //进行配对的要求满足其一即可。 8 //1.a ...
分类:
其他好文 时间:
2019-11-06 16:44:23
阅读次数:
70