#include #include #include #include #include #include using namespace std; #define MAXN 1111 int n,m,N,cnt; bool map[MAXN][MAXN]; bool mark[MAXN]; int ly[MAXN]; int lx[MAXN]; int dfs(int u,int m) { for(int v=1;v<=m;v++){ if(map[u][v]&&!mark[v]){ mark[v]=true; if(ly[v]==-1||dfs(ly[v],m)){ ly[v]=u; lx[u]=v; return 1; } } } return 0; } int MaxMatch(int n,int m) { memset(ly,-1,sizeof(ly)); memset(lx,-1,sizeof(lx)); int ans=0; for(int i=1;i<=n;i++){ memset(mark,false,sizeof(mark)); ans+=dfs(i,m); } return ans; } vector >g; vector >ans; int dfn[MAXN],low[MAXN]; int color[MAXN],_count; stackS; void Tarjan(int u) { low[u]=dfn[u]=++cnt; mark[u]=true; S.push(u); for(int i=0;i