二分图
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
#include#include #include #include #include #include #define maxn 501 using namespace std; int match[maxn],vis[maxn]; string a[maxn],b[maxn]; int m,n,t; vector q[maxn]; void init() { memset(match,-1,sizeof(match)); for(int i=0;i<=t;i++) q[i].clear(); } bool dfs(int x) { for(int i=0;i >a[i]>>b[i]; for(int i=1;i<=t;i++) for(int j=1;j<=t;j++) if(a[i]==b[j]||a[j]==b[i]) q[i].push_back(j); int ans=0; for(int i=1;i<=t;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } printf("%d\n",t-ans/2); } return 0; }