POJ1459Power Network(dinic模板)】的更多相关文章

Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage…
hdu1532 输入n,m. n条边,m个点,之后给出a到b的容量,求1到m的最大流. 注意:Dinic只能调用一次,因为原理是改变cap的值,如果调用多次一样的,那么第一次会对,其余的都会是0,因为,cap的值经过一次调用已经改变了,如果想调用多次,就只能再开一个数组,存下原来的cap值. #include <bits/stdc++.h> using namespace std; const int INF=0x3f3f3f3f; typedef long long LL; #define…
ISAP // UVa11248 Frequency Hopping:使用ISAP算法,加优化 // Rujia Liu struct Edge { int from, to, cap, flow; }; struct ISAP { int n, m, s, t; vector<Edge> edges; vector<int> G[maxn]; // 邻接表,G[i][j]表示结点i的第j条边在e数组中的序号 bool vis[maxn]; // BFS使用 int d[maxn]…
之前的Dinic模板照着刘汝佳写的vector然后十分鬼畜跑得奇慢无比,虽然别人这样写也没慢多少但是自己的就是令人捉急. 改成邻接表之后快了三倍,虽然还是比较慢但是自己比较满意了.虽然一开始ecnt从0开始WA了一发... 之前的码风也十分鬼畜呀缩进只缩1.2格不懂自己怎么想的.. 反正今天就安心划划水. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #in…
Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 25832   Accepted: 13481 Description A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supplied…
#include<cstring> #include<cstdio> #define FOR(i,f_start,f_end) for(int i=f_startl;i<=f_end;i++) #define MS(arr,arr_value) memset(arr,arr_value,sizeof(arr)) ; ; int size; int n; const int inf=0x3f3f3f3f; using namespace std; int head[maxn];…
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8599    Accepted Submission(s): 4005 Problem Description Every time it rains on Farmer John's fields, a pond forms over Bessie's…
输入为m,n表示m条边,n个结点 记下来m行,每行三个数,x,y,c表示x到y的边流量最大为c 这道题的模板来自于网络 http://blog.csdn.net/sprintfwater/article/details/7913061 算法时间复杂度o(V^2*E) 关于这个模板:Edge为前向星的边数,所以需要初始化Edge和head数组,其中head数组应初始化为-1 int dinic(int n,int s,int t);n表示有n个点,这个版无所谓点从0开始还是从1开始,s表示源点,t…
最大流模板: 普通最大流 无向图限制:将无向图的边拆成2条方向相反的边 无源汇点有最小流限制的最大流:理解为水管流量形成循环,每根水管有流量限制,并且流入量等于流出量 有源汇点的最小流限制的最大流 顶点有流量限制:拆成2个点,连接一条容量为点容量限制的边. 容量为负数:不能直接利用最大流求边权为负数的最小割. 模板使用Dinic算法,使用了当前弧优化,效率还是不错的. 但是ispa算法的效率更高,采用了当前弧优化的ispa算法那就更更高的效率了(=^ ^=) #include<iostream>…
标准的大白书式模板,除了变量名并不一样……在主函数中只需要用到 init 函数.add 函数以及 mf 函数 #include<stdio.h> //差不多要加这么些头文件 #include<string.h> #include<queue> #include<vector> #include<algorithm> using namespace std; +; //点的总数 const int INF=0x3f3f3f3f; struct ed…
procedure addedge(u,v,cap:longint); begin sid[tot].u:=u; sid[tot].v:=v; sid[tot].cap:=cap; sid[tot].next:=nd[u]; nd[u]:=tot; inc(tot); sid[tot].u:=v; sid[tot].v:=u; sid[tot].cap:=0; sid[tot].next:=nd[v]; nd[v]:=tot; inc(tot); end; function bfs:boolea…
#include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; ; ,maxm=; int cnt,fir[maxn],nxt[maxm],cap[maxm],to[maxm],dis[maxn]; void addedge(int a,int b,int c) { nxt[++cnt]=fir[a]; to[cnt]=b; cap[…
循环版,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }edge[MAXM]; int tol; int head[MAXN]; void init() { tol = ; memset(head, -, sizeof(head)); } ) { edge[tol].to = v; edge[tol].cap = w; edge[tol].flow = ; edge[tol].ne…
<题目链接> 题目大意: 给出一个无向图,求出其中的割点数量. 解题分析: 无向图求割点模板题. 一个顶点u是割点,当且仅当满足 (1) u为树根,且u有多于一个子树. (2) u不为树根,且满足存在(u,v)为树枝边(或称 父子边,即u为v在搜索树中的父亲),使得 dfn(u)<=low(v).(也就是说V没办法绕过 u 点到达比 u dfn要小的点) 注:这里所说的树是指,DFS下的搜索树. #include <cstdio> #include <cstring&g…
#include <iostream> #include <cstdio> #include <cstring> #include <queue> #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; , INF = 0x7fffffff; int d[maxn], head[maxn]; int n, m, s, t; struct edge{ int u, v, f, c, next; }…
#include <bits/stdc++.h> using namespace std; #define MP make_pair #define PB push_back #define ls first #define rs second typedef long long LL; typedef pair<int,int> PII; ; const double pi=acos(-1.0); ; ; vector<pair<int,int>>mp[K…
拆点,套模板. 详情见代码. // // main.cpp // hdu_4289 // // Created by Luke on 16/8/29. // Copyright © 2016年 Luke. All rights reserved. // //hdu-4289 #include <iostream> #include <vector> #include <queue> #define N 500 //开两倍大小多一些 #define INF 0x3f3f3…
//这个是邻接矩阵的#include<iostream> #include<queue> #include<string.h> #include<stdio.h> #include<algorithm> using namespace std; ; const int inf=0x3f3f3f; int N; int depth[maxn]; int a[maxn][maxn]; bool bfs(int s,int e)//广搜求深度 { qu…
一开始被T掉了之后,才害怕地发现之前写的Dinic基本上都是错的??!!!正确的写在注释里了,注意一下(;3<)馬鹿やろ 一个丧心病狂的优化前后效率对比:…
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n, m, S, T; ;//点数的最大值 ;//边数的最大值 const int INF = 0x3f3f3f3f; struct Edge { int to,next,cap,flow; } edge[MAXM]; //注意是MAXM int tol; int head[MAXN]; void init()…
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> using namespace std; #define eps 1e-6 #define inf 0x3fffffff #define N 410 struct node { int u,v,next; double w; }bian[N*4],f[N]; int yo…
Power Network Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description A power network consists of nodes (power stations, consumers and dispatchers) connected by power transport lines. A node u may be supp…
https://www.cnblogs.com/137shoebills/p/9100790.html http://poj.org/problem?id=2987 之前写过这道题,码一个dinic的最大流板子. 经典问题,选了一个点就有些点必须选,输出使选出的点的权值和最大的最少点数,并输出该权值和. 建图就是s向权值为正的点连流量为val的边,权值为负的点向t连流量为-val的边,所有的权值和-最大流就是答案. 类似于https://www.cnblogs.com/137shoebills/…
Problem Description Our geometry princess XMM has stoped her study in computational geometry to concentrate on her newly opened factory. Her factory has introduced M new machines in order to process the coming N tasks. For the i-th task, the factory…
题意:有N个城市,现在城市S出现了一伙歹徒,他们想运送一些炸弹到D城市,不过警方已经得到了线报知道他们的事情,不过警察不知道他们所在的具体位置,所以只能采取封锁城市的办法来阻断暴徒,不过封锁城市是需要花费一定代价的,由于警局资金比较紧张,所以想知道如果完全阻断暴徒从S城市到达D城市的最小需要花费的代价. 思路:将每个点都拆分成2个,表示为i和i*,i是原来的起点,然后i到i*的权值为i点原来的权值,连边的时候要注意的是要从i*连接i,因为最初在起点的时候,首先要走的就是从i到i*,然后接下来一定…
//非当前弧优化版 #include <iostream> #include <cstdio> #include <math.h> #include <cstring> #include <queue> #define INF 0x3f3f3f3f using namespace std; int tab[250][250];//邻接矩阵 int dis[250];//距源点距离,分层图 int N,M;//N:点数;M,边数 queue<…
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #include<vector> using namespace std; ; const int INF=0x7fffffff; int n,m;//n:edges,m:points struct node…
注意:有时加边不一定要加反向弧. Next Array版. #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; #define INF 2147483647 #define MAXN 20011 #define MAXM 600301 int v[MAXM],cap[MAXM],en,first[MAXN],next[MAXM]…
#include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; queue<int>q; int INF=1e9; ],cur[],ct=,s,t,d[],ans; struct N{ int to,next,w; }edge[]; void add(int x,int y,int z) { edge[++ct]=(N){y,he…
[题解] 首先,我们可以发现,A到B的所有路径中,最长边的最小值一定在最小生成树上.我们用Kruskal最小生成树时,假设有两个点集U,V,若加入一条边w(u,v)使U,V联通,那么w就是U中每个点到V中每个点的路径上的最长边.因为我们每次在可选的w中选择了最小的,所以可以满足最长边最短的要求. 我们可以做kruskal,当A与B恰好连通时,当前加入的边w就是A中的每个点到B中的每个点的最长边. 但这种做法在本题中似乎不可行..因为本题中询问有很多组,效率上有问题(或者是我太傻了QAQ 其实也可…