HDU 3829
#include <iostream>
#include <cstdio>
#include <string.h>
#include <vector>
using namespace std;
struct people{
char ch1,ch2;
int x,y;
}aa[505];
vector<int> ss[505];
int visted[505],flag[505],panduan[505];
bool dfs(int x){
for(int i=0;i<ss[x].size();++i){
if(!visted[ss[x][i]]){
visted[ss[x][i]]=1;
if(!flag[ss[x][i]]||dfs(flag[ss[x][i]]))
{
flag[ss[x][i]]=x;/*panduan[ss[x][i]]=1;panduan[x]=1;*/
return true;}
}
}
return false;
}
int main(){
//freopen("1.txt","r",stdin);
int n,m,p;
while(scanf("%d%d%d",&n,&m,&p)!=EOF){
memset(ss,0,sizeof(ss));
for(int i=1;i<=p;++i){
cin>>aa[i].ch1>>aa[i].x>>aa[i].ch2>>aa[i].y;
}
for(int i=1;i<=p;++i){
for(int j=1;j<=p;++j){
if(aa[i].ch1==aa[j].ch2&&aa[i].x==aa[j].y)
{ ss[i].push_back(j);ss[j].push_back(i);}
}
}
memset(flag,0,sizeof(flag));
memset(panduan,0,sizeof(panduan));
int num=0;
for(int i=1;i<=p;++i){
memset(visted,0,sizeof(visted));
//if(!panduan[i])
if(dfs(i))
{/*printf("i===%d\n",i);printf("size===%d\n",ss[i].size());*/ num++;}
}
printf("%d\n",p-num/2);
}
return 0;
}
POJ1446
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
vector<int> ss[505];
int flag[505],visted[505];
bool dfs(int x){
for(int i=0;i<ss[x].size();++i){
if(!visted[ss[x][i]]){
visted[ss[x][i]]=1;
if(flag[ss[x][i]]==-1||dfs(flag[ss[x][i]])){
flag[ss[x][i]]=x;
return true;
}
}
}
return false;
}
int main(){
int n;
while(~scanf("%d",&n)){
memset(ss,0,sizeof(ss));
memset(flag,-1,sizeof(flag));
int x,num,y,m=n;
char ch1,ch2,ch3;
while(m--){
cin>>x>>ch1>>ch2>>num>>ch3;
while(num--){
scanf("%d",&y);
ss[x].push_back(y);
}
}
int sum=0;
for(int i=0;i<n;++i){
memset(visted,0,sizeof(visted));
if(dfs(i))
sum++;
}
printf("%d\n",n-sum/2);
}
return 0;
}
POJ 2771
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <string.h>
#include <vector>
#include <string>
using namespace std;
vector<int> ss[505];
int flag[505],visted[505];
struct people{
int height;
char male;
string music;
string pe;
}aa[505];
bool dfs(int x){
for(int i=0;i<ss[x].size();++i){
if(!visted[ss[x][i]]){
visted[ss[x][i]]=1;
if(flag[ss[x][i]]==-1||dfs(flag[ss[x][i]])){
flag[ss[x][i]]=x;
return true;
}
}
}
return false;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int n;
memset(flag,-1,sizeof(flag));
memset(ss,0,sizeof(ss));
scanf("%d",&n);
for(int i=0;i<n;++i){
cin>>aa[i].height>>aa[i].male>>aa[i].music>>aa[i].pe;
}
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
int x=abs(aa[j].height-aa[i].height);
if(x<=40&&aa[j].male!=aa[i].male&&aa[j].music==aa[i].music&&aa[j].pe!=aa[i].pe){
ss[i].push_back(j);
}
}
}
int sum=0;
for(int i=0;i<n;++i){
memset(visted,0,sizeof(visted));
if(dfs(i))
sum++;
}
printf("%d\n",n-sum/2);
}
return 0;
}