POJ1274

来源:互联网 发布:达内可靠吗 知乎 编辑:程序博客网 时间:2024/05/29 17:24

Problem: The Perfect Stall
Description: 给奶牛挤牛奶,一个挤奶工只能给一头奶牛挤奶,一头奶牛也只能由一位挤奶工挤奶,现在,给出挤奶工能挤奶的牛的情况,问你最多有几头奶牛能成功挤奶。
Solution: 二分图的最大匹配。很经典的题目,用来练习匈牙利算法。
Code(C++):

#include <iostream>#include <vector>#include <string.h>using namespace std;const int M=200+5;bool mat[M][M];bool used[M];int belong[M];int n,m;vector<int> to[M];bool dfs(int s){    for(int i=0;i<to[s].size();i++){        int end=to[s].at(i);        if(used[end])            continue;        used[end]=true;        if(belong[end]==-1||dfs(belong[end])){            belong[end]=s;            return true;        }    }    return false;}int main(){    while(cin>>n>>m){        for(int i=0;i<M;i++)            to[i].clear(),            belong[i]=-1;        for(int i=1;i<=n;i++){            int num,x;            cin>>num;            while(num--)                cin>>x,                to[i].push_back(x);        }        int ans=0;        for(int i=1;i<=n;i++){            memset(used,false,sizeof(used));            if(dfs(i))                ++ans;        }        cout<<ans<<endl;    }    return 0;}
0 0
原创粉丝点击