题目链接:
题意:求有向图的最小路径覆盖。
思路:最小路径覆盖=|G|-二分图的最大匹配
#include#include int mat[125][125],link[125],visit[124],n,m,C; int OK(int u) { int v; for(v=1;v<=n;v++) if(!visit[v]&&mat[u][v]) { visit[v]=1; if(link[v]==-1||OK(link[v])) { link[v]=u; return 1; } } return 0; } void deal() { int i,ans=0; memset(link,-1,sizeof(link)); for(i=1;i<=n;i++) { memset(visit,0,sizeof(visit)); if(OK(i)) ans++; } printf("%d\n",n-ans); } int main() { for(scanf("%d",&C);C--;) { scanf("%d%d",&n,&m); int i,u,v; memset(mat,0,sizeof(mat)); for(i=1;i<=m;i++) scanf("%d%d",&u,&v),mat[u][v]=1; deal(); } return 0; }