http://acm.hdu.edu.cn/showproblem.php?pid=1068题目没说有多少个学生,所以我设为1000,AC了。
#include <iostream>
![](/Images/OutliningIndicators/None.gif)
using namespace std;
![](/Images/OutliningIndicators/None.gif)
const int M=1000;
bool g[M][M];
bool visit[M];
int link[M];
int n,k;
![](/Images/OutliningIndicators/None.gif)
bool find(int i)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
int j;
for(j=0;j<n;j++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if(g[i][j] && !visit[j])
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
visit[j]=true;
if(link[j]==-1 || find(link[j]))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
link[j]=i;
return true;
}
}
}
return false;
}
![](/Images/OutliningIndicators/None.gif)
int main()
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
int i,j,res,t,m;
char a,b;
while(cin>>n)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
memset(g,0,sizeof(g));
memset(link,-1,sizeof(link));
res=0;
for(t=0;t<n;t++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cin>>i>>a;
cin>>a>>m>>b;
while(m--)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
cin>>j;
g[i][j]=true;
}
}
for(i=0;i<n;i++)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
memset(visit,0,sizeof(visit));
if(find(i))
res++;
}
cout<<n-res/2<<endl;
}
return 0;
}
posted on 2011-09-13 19:24
大大木马 阅读(174)
评论(0) 编辑 收藏 引用