按馬的軌跡連邊,最後是一張二分圖,求最大匹配。可以跑匈牙利直接求出來,也可以連源點和匯點跑dinic。
我是學二分圖的時候寫的,當時寫的是匈牙利。我當時碼風好奇怪
1 #include 2匈牙利按給定關係建圖,仍是二分圖,求最大匹配。#define id(x, y) (x - 1) * n + y
3#define new(p) p = &tmp[++ecnt]45
struct edge tmp[1000005], *head[40005];6
7int vis[40005], match[40005], ecnt = -1
, n, m, tim, ans, tot;
8int dx = , dy=;
9bool ban[205][205
];10
11 inline void add(int f, int to)
1213
bool dfs(int
x) 21}22
}23return0;
24}2526
signed main()
32for (int i = 1; i <= n; i++) 40}
41}42for (int i = 1; i <= n; i++) 49}
50}51 printf("
%d\n
", tot -ans);
52return0;
53 }
依舊寫的是匈牙利。我當時沒看見spj,寫了一堆奇怪的東西。。。。
1 #include 2又是匈牙利using
namespace
std;
3#define n 100545
namespace
gekoo e[n];
910 pairp[n];
1112
intm, n, head[n], ecnt, match[n], ans, pcnt;
13bool
vis[n];
1415
void addedge(int f, int
to)
2021
bool dfs(int
u) 30}31
}32return0;
33}3435
void
qaq()
43for (int i = 1; i <= m; i++)
47if (ans == 0
) else56}
57 sort(p + 1, p + 1 +pcnt);
58for (int i = 1; i <= pcnt; i++)
61return;62
}63}64
}6566signed main()
把圖按格仔奇偶性黑白染色,源點連黑色,白色連匯點,黑色向相鄰白點連,求出最小割,用數字和減去。
建出來的仍是二分圖,這個過程其實就是在求二分圖的最大獨立集。
1 #include 2這次是dinic了#define id(x, y) ((x - 1) * m + y) 34
const
int n = 500005, inf = 0x3f3f3f3f;5
const
int dx[4] = , dy[4] = ;
6int n, m, sum, ecnt = 1
, s, t;
7int matrix[105][105
], head[n], dep[n];
8struct
edge e[n << 5
];11
12 inline void addedge(int f, int to, int
val) , head[f] =ecnt;
14 e[++ecnt] = , head[to] =ecnt;15}
1617
bool
bfs() 31}
32}33return
false;34
}3536int dfs(int x, int
flow)
43 las -= q, e[i].val -= q, e[i^1].val +=q;44}
45}46return flow -las;47}
4849
intdinic()
5455
signed main() 62}
63 s = n * m + 1, t = s + 1;64
for (int i = 1; i <= n; i++)
73 } else76}
77}78 printf("
%d\n
", sum -dinic());
79return0;
80 }
網路流 24 題
1 搭配飛行員 題意 n個飛行員,其中有m名飛行員是正駕駛員。飛機每架有兩個駕駛員,需乙個正駕駛員和乙個副駕駛員。由於種種原因,例如相互配合的問題,有些駕駛員不能在同一架飛機上飛行,問如何搭配駕駛員才能使出航的飛機最多。思路 裸二分圖匹配 最大流 題 版本一 網路流做法 引入源點s 0以及匯點t n...
網路流24題
學會網路流演算法後,我們要做的就是把問題轉化成網路流問題。求二分圖最大匹配。網路流建模要找到問題的關鍵特點,用連邊,流量 以及費用 把原問題轉化成網路流問題,包括最大流,最小割,費用流。二分圖最大匹配的特點是每個點最多屬於一條匹配邊。這相當於是說,每個點只能流過一次。要求的是最大匹配,可以得出建模為...
網路流24題
經典問題,做了一部分 太水的就不記錄了 最大流是對於一種完整的匹配的處理,一條路乙個貢獻。要求匹配盡可能多。費用流是對於乙個路徑的最值的處理,每條邊自己的費用。再匹配最多前提下,匹配的費用達到最值。難點就是對於條件狀態的設計 網路流24題 餐巾計畫問題 費用流建模 考慮每天一定有ri條髒毛巾,所以髒...