https://www.luogu.com.cn/problem/UVA11419
#include <bits/stdc++.h>
using namespace std;
const int N = 4000001;
int h[N],e[N<<1],ne[N<<1],idx;
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int r,c,n;
int mx[N],mt[N],flag[N];
vector<int> v;
bool v1[N],v2[N];
bool find(int u)
{
for(int i=h[u];i!=-1;i=ne[i])
{
if(!flag[e[i]])
{
flag[e[i]]=1;
v.push_back(e[i]);
if(mt[e[i]]==0 || find(mt[e[i]]))
{
v1[u]=1;
v2[e[i]]=1;
mt[e[i]]=u;
mx[u]=e[i];
return true;
}
}
}
return false;
}
int main()
{
scanf("%d%d%d",&r,&c,&n);
memset(h,-1,sizeof h);
for(int i=1;i<=n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
}
for(int i=1;i<=r;i++)
{
int k=find(i);
int t=v.size();
for(int i=0;i<t;i++) flag[v[i]]=0;
v.clear();
}
int cnt=0;
for(int i=1;i<=r;i++)
{
if(!v1[i]) cnt++;
}
for(int i=1;i<=c;i++)
{
if(v2[i]) cnt++;
}
cout<<cnt<<" ";
for(int i=1;i<=r;i++)
{
if(!v1[i]) printf("r%d ",i);
}
for(int i=1;i<=c;i++)
{
if(v2[i]) printf("c%d ",i);
}
}