1191: [HNOI2006]超级英雄Hero

来源:互联网 发布:电动牙刷 知乎 编辑:程序博客网 时间:2024/05/04 11:14

题目链接

题目大意:给定n个锦囊和m个问题,每个问题可以使用给定的两个锦囊之一,必须连续答题,求最多答上多少题

题解:题看成一组点,锦囊看成一组点,大力匹配即可

我的收获:naive

#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int M=1005;int n,m,mp[M][M],lik[M];bool vis[M];bool hungary(int x){    for(int i=1;i<=n;i++){        if(!mp[x][i]||vis[i]) continue;        vis[i]=true;        if(!lik[i]||hungary(lik[i])) return lik[i]=x;    }    return false;}void work(){    int ans=0;    for(int i=1;i<=m;i++){        memset(vis,0,sizeof(vis));        if(hungary(i)) ans++;        else break;    }    cout<<ans<<endl;}void init(){    int x,y;    cin>>n>>m;    for(int i=1;i<=m;i++){        scanf("%d%d",&x,&y);        mp[i][x+1]=mp[i][y+1]=1;    }}int main(){    init();    work();    return 0;}
原创粉丝点击