思路和题解差不多,感觉是建图错了,求助
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f;
struct node
{
int cap,flow;
int next,to;
}edge[1000001];
int n,m,head[1000001],now[1000001],dep[1000001];
int tot=1;
int s,t;
void add(int x,int y,int dis)
{
edge[++tot].cap=dis;
edge[tot].to=y;
edge[tot].next=head[x];
head[x]=tot;
}
bool bfs()
{
for(int i=0;i<=t;i++)
{
dep[i]=inf;
}
dep[s]=1;
queue<int>que;
que.push(s);
now[s]=head[s];
while(que.size())
{
int x=que.front();
que.pop();
for(int i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(edge[i].cap>0&&dep[y]==inf)
{
que.push(y);
now[y]=head[y];
dep[y]=dep[x]+1;
if(y==t)
{
return 1;
}
}
}
}
return 0;
}
int dfs(int x,int ans)
{
if(x==t)
{
return ans;
}
int d,res=0;
for(int i=now[x];i&&ans;i=edge[i].next)
{
now[x]=i;
int y=edge[i].to;
if(edge[i].cap>0&&(dep[y]==dep[x]+1))
{
d=dfs(y,min(edge[i].cap,ans));
if(d==0)
{
dep[y]=inf;
}
edge[i].cap-=d;
edge[i^1].cap+=d;
res+=d;
ans-=d;
}
}
return res;
}
int main()
{
int a,b;
int c;
cin>>a>>b>>c;
cin>>n;
int x,y;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
add(0,y,1);
add(y,0,0);
add(y,2*x+b-1,1);
add(2*x+b-1,y,0);
}
for(int i=1;i<=a;i++)
{
add(2*i+b-1,2*i+b,1);
add(2*i+b,2*i+b-1,0);
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
add(b+(2*x),y+a+b+a,1);
add(y+a+a+b,b+(2*x),0);
add(y+a+a+b,a+a+b+c+1,1);
add(a+a+b+c+1,y+a+a+b,0);
}
int num=0;
s=0,t=a+a+b+c+1;
while(bfs())
{
num+=dfs(s,inf);
}
cout<<num;
return 0;
}