转化为二分图博弈,二分图博弈是个固定套路。
https://blog.csdn.net/qq_36797743/article/details/80043107
这题注意卡常数。
#include <bits/stdc++.h>
using namespace std;
const int maxn=100000+100;
const int INF=0x3f3f3f3f;
struct Edge{
int from,to,cap,flow;
};
int flag[maxn];
struct Dinic{
int n,n1,n2,m,s,t,start;
vector<Edge> edges;
vector<int> G[maxn];
bool vis[maxn];
int d[maxn];
int cur[maxn];
int fac[10]={
1,10,100,1000,10000,100000};
int sum(int x)
{
int ret=0;
while(x)ret+=x%10,x/=10;
return ret&1;
}
void init(int T)
{
int m,x,maxx=1;
cin>>n>>m>>start;
s=fac[n]+5,t=s+1;
while(m--)scanf("%d",&x),flag[x]=