zoukankan      html  css  js  c++  java
  • hdu 1281 棋盘游戏(关键匹配)

          第一次做到这种题目,虽然是中文题目,但是依旧不懂他的意思,直接上网搜了题解,然后自己想了下,豁然开朗,发现这种建图的方式真的很奇特,

    用x坐标匹配y坐标,这样x-y就是点(xi,yi)了,这是这道题建图的新颖之处。

    题意:中文题。。。。

    分析:循环删边,如果删除这条边后,他的最大匹配等于原最大匹配则说明该边不是重要边,也就是说该点不是题目要求的重要点,若删除该边(该点)

            匹配不等于原匹配,则说明该点是重要点

    View Code
    #include<stdio.h>
    #include<string.h>
    
    const int MAXN=110;
    int map[MAXN][MAXN];
    int pre[MAXN];
    int vis[MAXN];
    int n,m;
    int find(int cur)
    {
        int i;
        for(i=1;i<=m;i++)
        {
            if(map[cur][i]==1 && !vis[i])
            {
                vis[i]=1;
                if(pre[i]==-1 || find(pre[i]))
                {
                    pre[i]=cur;
                    return 1;
                }
            }
        }
        return 0;
    }
    int main()
    {
        int i,j,k,x,y;
        int cnt,ans,cas=1;
        while(scanf("%d%d%d",&n,&m,&k)!=EOF)
        {
            memset(map,0,sizeof(map));
            memset(pre,-1,sizeof(pre));
            for(i=0; i<k; i++)
            {
                scanf("%d%d",&x,&y);
                map[x][y]=1;
            }
            int sum=0;
            for(i=1; i<=n; i++)
            {
                memset(vis,0,sizeof(vis));
                sum+=find(i);
            }
            cnt=0;
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=n; j++)
                {
                    ans=0;
                    if(map[i][j])//删边
                    {
                        memset(pre,-1,sizeof(pre));
                        map[i][j]=0;
                        for(k=1; k<=n; k++)
                        {
                            memset(vis,0,sizeof(vis));
                            ans+=find(k);
                        }
                        map[i][j]=1;
                        if(ans!=sum) cnt++;
                    }
                }
            }
            printf("Board %d have %d important blanks for %d chessmen.\n",cas++,cnt,sum);
        }
        return 0;
    }
  • 相关阅读:
    matplot 代码实例2
    sklearn 线性模型使用入门
    python 之 决策树分类算法
    Leetcode 之Simplify Path @ python
    协同过滤CF算法之入门
    linux 下 rpc python 实例之使用XML-RPC进行远程文件共享
    Linux rpc 编程最简单实例
    Opencv 入门学习之图片人脸识别
    Django1.7开发博客
    Opencv 入门学习1
  • 原文地址:https://www.cnblogs.com/zsboy/p/2876293.html
Copyright © 2011-2022 走看看