摘要:
#include#include#include#include#define N 2000#define M 1000010#define inf 1=n)return flow-lv; if(lv==0) break; } if(d[v]>1; memset(index,-1,sizeof(index)); for(i=1;in)建立一个流量为1的边,从每个人向每个他从属的组织建立一条流量为1的边,在由每个组织建立一条流向汇点的边,我们可以二分枚举组织向汇点边的流量。 阅读全文
摘要:
思路:由(i+j)为偶数的点向(i+j)为奇数的点建边。求一次最大匹配,若正好为空格数(不包含洞)的一半,即输出YES。#include#include#include#include#define Maxn 1101using namespace std;int n,m,vi[Maxn],match[Maxn],graphic[Maxn][Maxn],map[40][40],N[Maxn],M[Maxn],x,y;int dfs(int u){ int i; for(i=1;i<=y;i++) { if(!vi[M[i]]&&graphic[u][M[i]])... 阅读全文
摘要:
就是最简单的最大匹配,没的说#include#include#include#include#define Maxn 310using namespace std;int n,m,vi[Maxn],match[Maxn],graphic[Maxn][Maxn];int dfs(int u){ int i; for(i=1;i<=m;i++) { if(!vi[i]&&graphic[u][i]) { vi[i]=1; if(match[i]==-1||dfs(match[i])) {... 阅读全文
摘要:
思路:我们首先来一遍拓扑排序,将点按先后顺序排列于一维数组中,然后扫描一遍数组,将每个点的出边所连接的点进行更新,即可得到最优解。#include#include#include#include#include#define inf 2000000010#define Maxn 100010#define Maxm 1000010using namespace std;int dist[Maxn],vi[Maxn],index[Maxn],e,value[Maxn],indegree[Maxn],outdegree[Maxn],ans[Maxn],num,n;struct Edge{ i... 阅读全文